Премьер-программа количество
Как написать программу, которая находит и печатает все простые числа между 3-100?
Попробуйте этот пример кода:
#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; } }
Я переместил ваш код из комментария в ваше решение. Пожалуйста, разместите код только внутри вопроса или решения. Всегда помните, что всегда нужно добавлять предварительные теги. В противном случае код не будет отформатирован должным образом. Неформатированный код очень трудно читать и расшифровывать.
Спасибо за сотрудничество!
Мне так жаль, я думал, что использовал предварительные теги :S
Первичный качественный ответ :)
Вы должны быть в состоянии решить эту проблему, просто разбейте ее на более мелкие куски
1) постройте свой цикл for - Не забывайте, что вы можете увеличить его в два раза
2) Напишите заявление о печати
3) см. Правило делимости[^] для правил, чтобы увидеть, есть ли у числа какие - либо простые коэффициенты
4) Проверьте, можно ли разделить текущее число на любое из обнаруженных простых чисел до сих пор
Этого должно быть достаточно, чтобы вы начали
Вот реализация для сита Эратосфена, на самом деле есть лучший алгоритм сита, но этот (наоборот) прост для понимания.
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; }
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; }
Решето Эратосфена[^] всегда был моим любимцем :).
Другой старый, но положительный герой-это Тест На Примитивность Ферма[^]. Поскольку тест на примитивность ферма действительно имеет свои недостатки, вы можете обратиться к этой странице, где перечислены другие тесты на примитивность: Тест На Примитивность[^]
с уважением,
Я бы хотел дать вам дополнительные баллы за правильное написание "Эратосфен", но вам придется довольствоваться стандартными 5.
:)