Member 8325925 Ответов: 6

Премьер-программа количество


Как написать программу, которая находит и печатает все простые числа между 3-100?

6 Ответов

Рейтинг:
2

epanjohura

Попробуйте этот пример кода:

#include
using namespace std;
void prime_num(int);
int main()
{
    cout << " Enter a number and I will generate the prime numbers up to that number: ";
    int num = 0;
    cin >> num;
    prime_num(num);
}

void prime_num( int num)
{
    bool isPrime=true;
    for ( int i = 0; i <= num; i++)
    {
        for ( int j = 2; j <= num; j++)
        {
            if ( i!=j && i % j == 0 )
            {
                isPrime=false;
                break;
            }
        }
       if (isPrime)
       {
           cout <<"Prime:"<< i << endl;
       }
       isPrime=true;
    }
}


Manfred Rudolf Bihy

Я переместил ваш код из комментария в ваше решение. Пожалуйста, разместите код только внутри вопроса или решения. Всегда помните, что всегда нужно добавлять предварительные теги. В противном случае код не будет отформатирован должным образом. Неформатированный код очень трудно читать и расшифровывать.

Спасибо за сотрудничество!

epanjohura

Мне так жаль, я думал, что использовал предварительные теги :S

Espen Harlinn

Первичный качественный ответ :)

Рейтинг:
2

Reiss

Вы должны быть в состоянии решить эту проблему, просто разбейте ее на более мелкие куски

1) постройте свой цикл for - Не забывайте, что вы можете увеличить его в два раза
2) Напишите заявление о печати
3) см. Правило делимости[^] для правил, чтобы увидеть, есть ли у числа какие - либо простые коэффициенты
4) Проверьте, можно ли разделить текущее число на любое из обнаруженных простых чисел до сих пор

Этого должно быть достаточно, чтобы вы начали


Рейтинг:
2

ShacharK

Вот реализация для сита Эратосфена, на самом деле есть лучший алгоритм сита, но этот (наоборот) прост для понимания.

bool *eratosthenes(int top)
{
    bool * sieve = new bool[top+1];

    // Initialize values

    sieve[0] = false; sieve[1] = false;
    for(int i=2;i<=top;i++)
        sieve[i] = true;

    /* it is sufficient to scan up to the sqrt, 
       because the inner loop would start at i*i. */
    for(int i=2;i <= sqrt(top); i++)
    {
        /*If i is not prime, the 2nd loop is redundant, because there was already p 
          that would have cancelled out both i and every other possible j. */
        if(!sieve[i])
            continue;

        /*we can start from i*i because i*2, ... i*(i-1) would already have 
          been assigned false in previous iterations by prime div of 2.,i-1. */
        for(int j=i*i;j<=top;j+=i)
            sieve[j] = false; // j isn't prime - i is a factor
    }
    return sieve;
}


Рейтинг:
2

sravani.v

int main()
{
bool isPrime=true;

//Loop through all the numbers 3-100
for(int primeCandidate=3; primeCandidate<=100; primeCandidate++)
{
//Reset isPrime to true
isPrime = true;

//Check the factors
for(int factor=2; factor<primecandidate-1;>{
//If a factor is found, the number is not prime. No reason to check
//the rest of the numbers, so break out of this 'for' loop.
if(primeCandidate%factor == 0)
{
isPrime = false;
break;
}
}

//If the number is prime, print it.
if(isPrime == true)
{
cout<< primeCandidate << " is prime." << endl;
}
}

return 0;
}


Рейтинг:
0

Manfred Rudolf Bihy

Решето Эратосфена[^] всегда был моим любимцем :).
Другой старый, но положительный герой-это Тест На Примитивность Ферма[^]. Поскольку тест на примитивность ферма действительно имеет свои недостатки, вы можете обратиться к этой странице, где перечислены другие тесты на примитивность: Тест На Примитивность[^]

с уважением,

—МРБ


Richard MacCutchan

Я бы хотел дать вам дополнительные баллы за правильное написание "Эратосфен", но вам придется довольствоваться стандартными 5.

Manfred Rudolf Bihy

:)

Рейтинг:
0

Liju Sankar

Погуглите Его

Первые две ссылки дадут вам пример кода