#include <iostream>
using namespace std;

int main() 
{ 
    for (int i = 2; i <= 100; i++) { // 遍历2~100
        for (int k = 2; k <= i; k++) { // 除数
            // 排除所有在 i=k 之前 能被k整除(余数为0)的数
            if (i % k == 0 && i != k) 
                break;
            // 输出所有在 i=k 且 i%k=0的数
            if (i % k == 0 && i == k) 
                cout << i << endl;
        }
    } 
    return 0;
}

这是按照质数的定义最朴素的算法。就是说除了一和它自身之外,任何数都不是它的因子。符合这样条件的数就是一个素数。这程序的内循环,就是穷举2~i-1这样的数。如果这之间某个数能够整出i。就提前退出循环。

另一种形式,其实是少了一个外层循环:

#include<stdio.h>
#include<math.h> 
int main()
{
	int n;
	scanf("%d", &n);
	for(int i = 2; i <=sqrt(n); i++)
	{
		if(n % i == 0)
		{
			printf("%d is not prime number\n", n);
			return 0;
		}
	}
	printf("%d is prime number\n", n);
	return 0;
}

优化:原本应该是2~i-1,其实不用到i-1,到根号n(当前判断的数开根)就够了

posted on 2020-02-01 18:20  海月CSDN  阅读(68)  评论(0编辑  收藏  举报