Java教程

习题 5.1 用筛法求100之内的素数。

本文主要是介绍习题 5.1 用筛法求100之内的素数。,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

习题 5.1 用筛法求100之内的素数。

用筛法求素数的基本思想是:

把从2到N的一组正整数从小到大按顺序排列。从中依次删除2的倍数、3的倍数、5的倍数,直到根号N的倍数为止,剩余的即为2~N之间的所有素数。如有:

2 3 4 5 6 7 8 9 10

11 12 13 14 15 16 17 18 19 20

21 22 23 24 25 26 27 28 29 30

去掉2的倍数(不包括2),余下的数是:

3 5 7 9 11 13 15 17 19 21 23 25 27 29

剩下的数中3最小,去掉3的倍数,如此下去直到所有的数都被筛完,求出的素数为:

2 3 5 7 11 13 17 19 23 29

代码:

#include<iostream>
#include<iomanip>
using namespace std;


int main()
{
	int i,j,k;
	int arr[98];

	for (i = 0; i != 98; ++i)   //存2~98
	{
		arr[i] = i + 2;
	}

	for (i = 0; i != 98 ; ++i)    
	{
		for (j = i+1; j != 98; ++j) 
		{
			if (arr[i] != 0 && arr[j] != 0)
			{
				if (arr[j] % arr[i] == 0)       //去除倍数
				{
					arr[j] = 0;
				}
			}
		}
	}

	for (i = 0,k = 0; i != 98; ++i) 
	{
		if (arr[i] != 0)
		{
			cout << setw(4)<<arr[i];
			++k;
		}
		if (k % 10 == 0)    //每行输出10个
		{
			cout << endl;
			k = 0;
		}
	}

	return 0;
}

运行结果:

 

这篇关于习题 5.1 用筛法求100之内的素数。的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!