Чтобы узнать больше о числах Zeisel
Число Цейзеля — это бесквадратное целое число k с не менее чем тремя простыми множителями, которые попадают в шаблон
p[x] = a*p[x-1] + b
где a и b — некоторые целочисленные константы, а x — порядковый номер каждого простого множителя в факторизации, отсортированный от меньшего к большему. Для определения чисел Цейзеля 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;
}
a
не может быть отрицательным, верно? википедия ничего не говорит об этом, еслиa
может быть отрицательным, то могут быть бесконечные решения для a и b !!! - person niceman   schedule 16.06.2016Math.sqrt(num) == (int) Mat.sqrt(num)
не является подходящим тестом на отсутствие квадратов. 10 — число без квадратов, а 18 — нет, потому что его можно без остатка разделить на квадрат (3^2). - person AJNeufeld   schedule 17.06.2016a < fact[0]
не допускается. - person AJNeufeld   schedule 17.06.2016