Чтобы узнать больше о zeisel numbersКак я могу запрограммировать, является ли число номером zeisel или нет?
Zeisel номер является бесквадратно целого числа к с по меньшей мере, три главными факторами, которые попадают в шаблон
p[x] = a*p[x-1] + b
, где А и В некоторые integer константы и 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;
}
Преобразование отрицательного на положительный. – Krythic
'a' не может быть отрицательным, не так ли? wikipedia ничего не говорит об этом, если 'a' может быть отрицательным, могут быть бесконечные решения для a и b !!! – niceman
'Math.sqrt (num) == (int) Mat.sqrt (num)' не является надлежащим критерием для «без квадратов». «10» - это квадратное число, но «18» - это не потому, что оно может быть равномерно разделено квадратом (3^2). – AJNeufeld