Справка по вычислениям простых чисел Java

Я новичок, простите мою неорганизованность. Итак, что я сделал, так это создал массив, заполненный всеми простыми числами от 8 до 100. Теперь я хочу создать еще один массив, который найдет все простые числа от 101 до 200. Итак, позвольте мне объяснить, как я сделал первую часть:

//Prime1 — это динамический массив целых чисел, в котором хранятся все простые числа от 8 до 100.

int arrayCounter = 0; 
for(int primeTest = 8; primeTest<=100; primeTest++)
{
    if(primeTest%2!=0 && primeTest%3!=0 && primeTest%5!=0 && primeTest%7!=0)
    { 
        Prime1.add(primeTest); //adds the prime numbers to array
        arrayCounter = arrayCounter +1; 
    }
    else 
    { 
        arrayCounter = arrayCounter + 1; 
    } 
}

Теперь вернемся к основной проблеме, вместо того, чтобы писать «if (primeTest % «prime#»! = 0)», я хотел бы иметь возможность использовать модуль для всего массива Prime1 и посмотреть, не равны ли все значения нулю. , Позвольте мне уточнить.

for(int primeTest2 = 101; primeTest2 <= 200; primeTest2++)
{
    for(int arrayCounter2 = 0; arrayCounter2 < Prime1.size(); arrayCounter2++)
    {      
        if(primeTest2 % Prime1.get(arrayCounter2) != 0 )
        {
            Prime2.add(primeTest2);
        }
    }
}

//пожалуйста, простите любые отсутствующие фигурные скобки

^^ Итак, здесь происходит то, что я беру значение, начинающееся с 101, и соединяю его по модулю с первым значением массива Prime1. Как вы знаете, это может дать мне ложное срабатывание, потому что 11 (первое простое число в массиве) может по-прежнему показывать true даже с числами, которые не являются простыми. Вот почему мне нужно иметь возможность проверить число со всеми значениями в массиве, чтобы убедиться, что оно не может быть разделено ни на какое другое простое число (что означает, что оно простое).


person Shafin Amin    schedule 29.07.2014    source источник
comment
Новичок не является оправданием отсутствия организации.   -  person barak manos    schedule 29.07.2014
comment
Почему вы пытаетесь изобрести велосипед? Посмотрите, как следует проверять простые числа   -  person fed.pavlo    schedule 29.07.2014
comment
@fed.pavlo: Практика, веселье и прибыль — очень веские причины изобретать велосипеды. Хотя в данном случае это, наверное, только практика...   -  person tilpner    schedule 29.07.2014


Ответы (2)


Ваш метод крайне неэффективен, тем не менее, вот как это можно исправить:

for (int primeTest2 = 101; primeTest2 <= 200; primeTest2++)
{
    boolean prime = true;
    for (int arrayCounter2 = 0; arrayCounter2 < Prime1.size(); arrayCounter2++)
    {
        if (primeTest2 % Prime1.get(arrayCounter2) == 0)
        {
            prime = false;
            break;
        }
    }
    if (prime)
        Prime2.add(primeTest2);
}

Кстати, для первого набора простых чисел достаточно использовать 2, 3, 5, 7, 11, 13.

person barak manos    schedule 29.07.2014

Возьмите логическое значение и установите для него значение true. Если число можно разделить на любое из ваших простых чисел от 8 до 100 без остатка, установите для него значение false. Если это все еще верно после проверки каждого числа, добавьте проверенное число в массив Prime2, в противном случае продолжите со следующим числом. Пример:

for(int n = 101; n <= 200; n++)
{
    boolean isPrime = true;

    for(Integer p : Prime1)
        if(n % p == 0 )
        {
            isPrime = false;
            break;
        }

    if(isPrime)
            Prime2.add(n);
}

Но есть алгоритмы получше, чтобы проверить, является ли число простым, или вычислить все простые числа меньше n. Например, решето Эратосфена.

person kai    schedule 29.07.2014