그래서 저는 Euler 프로젝트에서 3 번 질문에 대한 답을 찾고자합니다. 나는 주어진 숫자의 가장 큰 소수 요소를 결정할 필요가있다.매우 큰 소수 요소는 어떻게 결정합니까?
프로젝트 오일러 : "13195의 소수 요소는 5, 7, 13 및 29입니다. 숫자 600851475143의 가장 큰 소수 요소는 무엇입니까?"
나는 내 코드를 작성했으며 int 크기만큼 완벽하게 작동합니다. 그러나 거대한 번호로 인해, 제 코드에는 변환 문제가 있습니다.
원래 나는 긴 변수와 긴 배열로 전환하려하지만 오류를 얻을 : '가능한 손실 변환을 긴에서 int로'을 그래서 난 내 코드가 매우 긴 숫자를 수용 할 수있는 방법? PE에서 추가 예 :
public class Test {
long[] delers;
public static void main(String[] args) {
Test test = new Test();
test.determineDividers(600851475143,determineNumberOfDividers(600851475143));
long a = test.determineHighestPrime(test.delers);
System.out.println(a);
}
public void determineDividers(long getal,long aantalDelers) {
delers= new long[aantalDelers];
long k = 0;
for (long i = 1; i < getal; i++) {
if (getal % i == 0) {
delers[k]=i;
k++;
}
}
}
public long determineNumberOfDividers(long getal) {
int k = 0;
for (long i = 1; i < getal; i++) {
if (getal % i == 0) {
k++;
}
}
return k;
}
public boolean determinePrime(long getal) {
for (long i = 2; i < getal; i++) {
if (getal % i == 0) {
return false;
}
}
return true;
}
public long determineHighestPrime(long[] deler) {
for (long i = deler.length - 1; i > 0; i--) {
if (determinePrime(deler[i]) == true) {
return deler[i]);
}
}
return 0;
}
}는 시간
EDIT 1 주셔서 감사합니다.
편집 2 : 추가 솔루션
public class Test {
long[] delers;
public static void main(String[] args) {
Test test = new Test();
test.determineDividers(600851475143L,test.determineNumberOfDividers(600851475143L));
long a = test.determineHighestPrime(test.delers);
System.out.println(a);
}
public void determineDividers(long getal,int aantalDelers) {
delers= new long[aantalDelers];
int k = 0;
for (long i = 1; i < getal; i++) {
if (getal % i == 0) {
System.out.println(i);
delers[k]=i;
k++;
}
}
}
public int determineNumberOfDividers(long getal) {
int k = 0;
for (long i = 1; i < getal; i++) {
if (getal % i == 0) {
k++;
}
}
return k;
}
public boolean determinePrime(long getal) {
for (long i = 2; i < getal; i++) {
if (getal % i == 0) {
return false;
}
}
return true;
}
public long determineHighestPrime(long[] deler) {
for (int i = deler.length - 1; i > 0; i--) {
if (determinePrime(deler[i]) == true) {
return deler[i];
}
}
return 0;
}
}
거대한 상수 다음에'L '을 넣습니다. 예 :'600851475143L ', 자바에게 '길다'라고 말해야한다. – ajb
오류가 발생하는 라인은 무엇입니까? – BitNinja
당신은'BigDecimal' 또는'BigInteger' 클래스로 이동할 것을 고려할 수도 있습니다. 그들은 어떤 크기든지의 수를 취급하기 위하여 지어진다. –