你能解释一下这段代码吗?为什么工作c ++素数

时间:2013-11-07 01:21:42

标签: c++

此代码用于查找从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!

3 个答案:

答案 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
}