C++找出2-200间的全部素数
素数:指在大于1的自然数中,除了1和它本身(2个因数)以外不再有其他因数的自然数
解题思路
让 m m m被2~ m \sqrt m m除,如果 m m m不能被2~ m \sqrt m m之间的任何一个整数整除,就可以确定 m m m是素数。
可能有小伙伴会问为什么是到 m \sqrt m m而不是到 m m m呢?
那我就给小伙伴们gai释一下
式子① n n n= m \sqrt m m × m \sqrt m m
式子② n n n= n n n×1
这里 n n n的因数就有了 m \sqrt m m和1以及它本身,共3个因数了,所以我们只需要计算到 m \sqrt m m就行了!
解题思路
为了记录 m m m是否为素数,可以用一个布尔变量(bool)pr来表示。在循环开始时先设pr为真(true),若 m m m被某一整数整除,就表示 m m m不是素数,此时pr的值变为假(false)。最后根据pr的值是否为真,决定是否输出 m m m。其中 n n n用来表示素数的个数。
#include<iostream>
#include<iomanip>
#include<cmath>
using namespace std;
int main()
{
int m, k, i, n = 0;
bool pr;
for (m = 2; m <= 200; m = m + 1)
{
pr = true;
k = int(sqrt(m));
for(i=2;i<=k;i++)
if (m % i == 0)
{
pr = false;
break;
}
if (pr)
{
cout << setw(5) << m;
n = n + 1;
if (n % 5 == 0)cout << endl;
}
}
cout << "\n1-200的素数有:" << n << "个!" << endl;
cout << endl;
system("pause");
return 0;
}
程序分析
当发现 m m m被某一整数整除之后即可判断 m m m不是素数,不必要在继续检查 m m m是否会被其他整数整除了,因此用break提前结束循环。第19行的if语句检查pr是否为真,如果本循环中 m m m始终未被任何一个整数整除,pr就保持其在循环开始时的true,因此应输出素数 m m m。然后我们知道偶数不是素数(至少包括了1和本身,还要2和另外一个因数),所以在本次循环最后让 m m m的值+2,再用同样的方法检测新的 m m m是否为素数。