C++找素数

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是否为素数。

运行结果

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_45782378/article/details/112991540
今日推荐