Я написал очень простую программу для поиска простых чисел до определенного диапазона, указанного пользователем. Но я столкнулся с проблемой. Программа просто перестает печатать простые числа, когда достигает составного числа. Я попытался понять, почему это останавливается, но я просто не могу понять, что с ним не так, потому что я новичок в программировании. Во всяком случае, вот код.
#include <iostream>
using namespace std;
int main()
{
int y;
int range;
cout << "Please enter the range. \n";
cin >> range;
for (y = 2; y <= range; y++)
{
int result;
for (int x = 1; x < y - 1; x++)
{
int prime = y - x;
if (y%prime != 0)
{
}
else
{
result = 0;
}
}
if (result != 0)
{
cout << y << " is a prime number. \n";
}
}
}
Как отмечает Брайан Градин, единственная проблема, которую я вижу, заключается в том, что вы должны инициализировать результат с ненулевым целым числом.
int result = 1;
Только после этой инициализации вы можете сделать правильную проверку после цикла for, изменился ли результат на ноль.
Без инициализации любой доступ к значению этой переменной приводит к неопределенному поведению.
РЕДАКТИРОВАТЬ:
Для полноты я должен добавить предложения других, что более стандартный способ сделать это:
for (y = 2; y <= range; y++)
{
bool isPrime = true;
// The following loop should be changed to loop through the Sieve of primes
for (int x = 2; x*x < y ; x++) // You need to loop only till sqrt(y)
{
if (y%x == 0) // if you found a factor
{
isPrime = false;
break;
}
}
if ( isPrime )
{
cout << y << " is a prime number. \n";
// and add this to the sieve of primes.
}
}
int main()
{
int y;
int range;
int result;
int prime;
cout << "Please enter the range. \n";
cin >> range;
for (y = 2; y <= range; y++)
{
result=1;
for (int x = 1; x <= y - 1; x++)
{
prime = y - x;
if (y%prime != 0)
{
}
else
{
result = 0;
}
}
if (result != 0)
{
cout << y << " is a prime number. \n";
}
}
}
я изменил ваше выражение о запрете forloops.. !!
for (int x = 1; x <= y - 1; x++)
и измените свои объявления на верх:
int result=0;
int prime;
result
во что-нибудь, это заставляет меня нервничать. Что-то, кроме нуля.
result
может быть использован без инициализации