此代码用于查找从3到n的素数,n是输入。这段代码完美无缺,但我需要更清楚地理解嵌套for循环中的部分。
#include <iostream>
using namespace std;
int main ()
{
cout << "Please enter a number: \n";
int inputtedNumber;
cin >> inputtedNumber;
cout <<"the primes between 3 and that number are: \n";
int candidate = inputtedNumber;
for (int i=3; i<candidate; i++)
{
bool prime=true;
for (int j=2; j*j<=i;j++)
{
if (i % j == 0)
{
prime=false;
break;
}
}
if(prime) cout << i << "\n";
}
system("pause");
return 0;
}
thank you!
答案 0 :(得分:2)
内部循环查看从2到i
的平方根的每个数字,以查看i
是否可被该数字整除。如果i
可以被j
整除,则i%j
将为零。如果它找到了除数,那么我们就知道它不是素数并且可以停止查看。
没有必要超越平方根,因为如果有一个大于此的除数,那么还必须有一个小于该值的相应除数,这个除数已经在这个循环中找到了。
答案 1 :(得分:0)
这条线是关键。
if (i % j == 0)
如果if
可被i
整除,则会执行j
块,这意味着i
不是素数。
答案 2 :(得分:0)
for (int i=3; i<candidate; i++) // for every i between 3 and candidate
{
bool prime=true;
for (int j=2; j*j<=i;j++) // for every j between 2 and the square root of i
{
if (i % j == 0) // if there is an i that is evenly divisible by j
{
prime=false; // set the flag
break; // break the inner loop
}
}
if(prime) cout << i << "\n"; // if i was a prime (no j's were evenly divisible), print it
}