2
爲了更多地瞭解zeisel numbers如何編程以檢查數字是否是zeisel號碼?
甲的Zeisel數與至少三個素因子一個正方形 - 自由整數k落入圖案
p[x] = a*p[x-1] + b
其中a和b是一些整數常數,x是分解中每個素因子的索引號,從最低到最高排序。爲了確定Zeisel數字,p [0] = 1.
我已經在下面用java編寫了這段代碼。此功能測試正b,但不適用於負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;
}
轉換負轉正。 – Krythic
'a'不能是負面的,對吧?維基百科對此沒有提出任何意見,如果「a」可能是負數,那麼a和b可以有無限的解決方案! – niceman
'Math.sqrt(num)==(int)Mat.sqrt(num)'不適合「無平方」測試。 「10」是一個無方數的數字,但「18」並不是因爲它可以平均除以正方形(3^2)。 – AJNeufeld