zoukankan      html  css  js  c++  java
  • 用筛选法求100之内的素数

    1. 用筛选法求100之内的素数

    【答案解析】

    素数:约数为1和该数本身的数字称为素数,即质数

    筛选法:又称为筛法。先把N个自然数按次序排列起来。1不是质数,也不是合数,要划去。第二个数2是质数留下来,而把2后面所有能被2整除的数都划去。2后面第一个没划去的数是3,把3留下,再把3后面所有能被3整除的数都划去。3后面第一个没划去的数是5,把5留下,再把5后面所有能被5整除的数都划去。这样一直做下去,就会把不超过N的全部合数都筛掉,留下的就是不超过N的全部质数。因为希腊人是把数写在涂腊的板上,每要划去一个数,就在上面记以小点,寻求质数的工作完毕后,这许多小点就像一个筛子,所以就把埃拉托斯特尼的方法叫做“埃拉托斯特尼筛”,简称“筛法”。(另一种解释是当时的数写在纸草上,每要划去一个数,就把这个数挖去,寻求质数的工作完毕后,这许多小洞就像一个筛子。)

    【代码实现】

    //用筛选法求100以内的素数
    #include<stdio.h>
    int main()
    {
    	int i, j, k = 0;
    
    	// 将数组汇总每个元素设置为:1~100
    	int	a[100];
    	for (i = 0; i < 100; i++)
    		a[i] = i+1;
    
    	// 因为1不是素数,把a[0]用0标记
    	// 最后一个位置数字是100,100不是素数,因此循环可以少循环一次
    	a[0] = 0;
    	for (i = 0; i < 99; i++)
    	{
    		// 用a[i]位置的数字去模i位置之后的所有数据
    		// 如果能够整除则一定不是素数,该位置数据用0填充
    		for (j = i + 1; j < 100; j++)
    		{
    			if (a[i] != 0 && a[j] != 0)
    			{
    				//把不是素数的都赋值为0
    				if (a[j] % a[i] == 0)
    					a[j] = 0;
    			}
    		}
    	}
    
    	printf(" 筛选法求出100以内的素数为:
    ");
    	for (i = 0; i < 100; i++)
    	{
    		//数组中不为0的数即为素数
    		if (a[i] != 0)
    			printf("%3d", a[i]);
    	}
    
    	printf("
    ");
    	return 0;
    }
    

    运行结果

    用筛选法求100之内的素数

  • 相关阅读:
    ssh: connect to host port 22: Connection refused
    mysql安装出现 conflicts with mysql*的解决办法
    Linux 搭建互信后,仍需要密码验证
    正则表达式的小技巧
    基础的正则表达式与re模块(2)
    包的导入
    import模块
    模块的导入
    logging 模块
    hashlib 模块
  • 原文地址:https://www.cnblogs.com/inta/p/13274037.html
Copyright © 2011-2022 走看看