Я написал две программы для моей лабораторной работы для поиска простых чисел формы k^2 +1 менее 1000000 двумя разными способами, чтобы иметь лучшую временную сложность во второй программе, но я получаю разные ответы в обоих случаях. Может кто-нибудь сказать мне, почему? Сначала мы сначала проверяем, является ли его простым (n), а затем проверяет, является ли его идеальный квадрат (n-1). Во втором мы непосредственно проверяем форму k^2 + 1 для k меньше, чем sqrt (1000000) -1 и увеличиваем счет. Но оба дают разные ответы. Какой метод подходит для подсчета простых чисел формы k^2 + 1 до 1000000?Java-Почему эти два дают разные выходы для вычисления простых чисел вида k^2 + 1?
Первая программа
public class KSqPlus1
{
public static void main(String [] args)
{
int k = 2;
for (int n = 11; n < 1000000; n += 2)
if (isPrime (n))
if (isPerfectSquare (n - 1))
{ k ++;
}
System.out.println (k);
}
public static boolean isPrime(int n)
{
for(int divisor=3;divisor*divisor<=n;divisor+=2)
if(n%divisor==0)
return false;
return true;
}
public static boolean isPerfectSquare (int n)
{
for(int divisor=2;divisor*divisor<=n;divisor+=2)
if(divisor * divisor < n) continue;
else if (divisor * divisor == n) return true;
return false;
}
}
вторая программа
import java.lang.Math;
public class PrimeArrays1
{
public static void main(String [] args)
{
int count=2;int k;
for(k=3;k<(Math.sqrt(1000000)-1);k++)
{ int x=k*k+1;
if(isPrime(x))
{
count++;
}
}
System.out.println(count);
}
public static boolean isPrime(double n)
{
for(int divisor=3;divisor*divisor<=n;divisor+=2)
if(n%divisor==0)
return false;
return true;
}
}
EDIT :: Ниже правильный IsPrime function..now программы дают одинаковый ответ :)
public static boolean isPrime(int n)
{
for(int divisor=2;divisor*divisor<=n;divisor+=1)
if(n%divisor==0)
return false;
return true;
}
Ну, одно отличие - 'd', который вы печатаете в обоих случаях, - это не то же самое - подумайте - в одном случае это простое число, а в другом - это число, в квадрате и добавленное 1. У вас есть тот же счет в обоих? – Eran
d предназначен только для отладки цели. Я просто забыл удалить его. Кроме того, это не имеет значения. удалил его сейчас – cain
Итак, каковы результаты, которые вы получаете? –