Я знаю об алгоритме Сита и который я использовал до сих пор, чтобы получить простые числа до 1 млрд.
Но теперь мне нужно знать, простое ли 10-значное число, и алгоритм Сита можетне вычисляю это в срок.
Я много искал и наткнулся на первичное тестирование Ферма, но это не сработало, так как какая-то часть я не могла понять, а другая говорила, что это говорит только о том,возможно, это простое число или нет с некоторой итерацией.
Я хочу знать, как я могу проверить, является ли большое число простым или нет, менее чем за 1 секунду или около того?Что было бы наиболее эффективным решением / алгоритмом для этого?
Редактировать Я также добавляю свой код для алгоритма Сита.
public class Random18 {
public static int sieveOfEratosthenes(int n)
{
// Create a boolean array "prime[0..n]" and initialize
// all entries it as true. A value in prime[i] will
// finally be false if i is Not a prime, else true.
boolean primes[] = new boolean[n+1];
Arrays.fill(primes,true); // assume all integers are prime.
primes[0]=primes[1]=false; // we know 0 and 1 are not prime.
for (int i=2;i<primes.length;i++) {
//if the number is prime,
//then go through all its multiples and make their values false.
if(primes[i]) {
for (int j=2;i*j<primes.length;j++) {
primes[i*j]=false;
}
}
}
if(primes[n]==true)
return 1;
else
return 0;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Enter");
int p = scanner.nextInt();
long t1 = System.currentTimeMillis();
int k = sieveOfEratosthenes(p);
long t2 = System.currentTimeMillis();
if(k==1)
System.out.println("yes");
else
System.out.println("no");
System.out.println("took "+(t2-t1)+" millis");
scanner.close();
}
}
Вывод для большихчисла, подобные этому:
999999937
да
заняло 24363 мельницы