2
는번호가 제지 번호인지 아닌지 확인하려면 어떻게 프로그램해야합니까?
Zeisel 수 패턴입니다
p[x] = a*p[x-1] + b
a와 b에 해당 적어도 세 소인수와 평방 무료 정수 k는 더 zeisel numbers에 대해 알아야 할 사항 일부 정수 상수이고 x는 인수 분해의 각 소수 요소의 인덱스 번호이며, 낮은 값에서 높은 값으로 정렬됩니다. Zeisel 수를 결정할 목적으로 p [0] = 1입니다.
이 코드는 java로 작성했습니다. 이 함수는 양수 b를 테스트하지만, 음수는이 아닙니다. 어떻게해야합니까?
// function to caluculate zeisel number
public static boolean zeisel(int num) {
// returning false if not squarefree
if (Math.sqrt(num) == (int) Math.sqrt(num))
return false;
int fac = 2, count = 0, str = num;
// arrray to store prime factors
int[] fact;
int a = 1, b = 0, i = 0;
// counting number of factors
while (num != 1) {
if(num % fac == 0) {
count++;
num /= fac;
}
else
fac++;
}
num = str;
fac = 2;
// storing factors in array
fact = new int[count];
while (num != 1) {
if(num % fac == 0) {
fact[i] = fac;
i++;
num /= fac;
} else
fac++;
}
if(i < 3)
return false;
// checking for zeisel equation
while(a < fact[0]) {
b = fact[0] - a;
for(i = 1; i < count; i++) {
if(fact[i] != a*fact[i -1] + b) {
break;
}
}
if(i == count) {
return true;
}
a++;
}
return false;
}
긍정적으로 부정적인 변환 : 당신이 (수정 square-free 조건)
fact[]
에 요소를 생성 한 후그래서, 테스트 같은 일이 될 수 있습니다. – Krythic
'a'는 음수 일 수 없습니다. 맞습니까? 위키피디아는 이것에 대해 아무 말도하지 않는다. 만약 'a'가 음수 일 수 있다면 a와 b에 대한 무한한 해결책이 될 수있다! – niceman
'Math.sqrt (num) == (int) Mat.sqrt (num)'은 "제곱없는"테스트에 적합하지 않습니다. "10"은 정사각형이없는 숫자이지만 "18"은 정사각형 (3^2)으로 균등하게 나눌 수 있기 때문에 아닙니다. – AJNeufeld