2
zeisel numbers番号がゼイゼル番号であるかどうかを確認するプログラムを作成するにはどうすればよいですか?
Aツァイゼル数パターンa及びbは
p[x] = a*p[x-1] + b
に分類少なくとも三つ素因数と正方形フリー整数kであるの詳細を知ることいくつかの整数の定数であり、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'は否定できないでしょうか? wikipediaはこれについて何も言っていない。もしaが負であるとaとbに対して無限の解があるかもしれない! – niceman
'' Math.sqrt(num)==(int)Mat.sqrt(num) 'は、「平方和なし」の適切なテストではありません。 「10」は正方形のない数字ですが、「18」は正方形(3^2)で均等に分割できるためではありません。 – AJNeufeld