素数

素数

素数(质数)(prime number):在大于1的数中,除了1和它本身以外不再有其他因数的数。eg:2   3  5  7  11   13......
问题:打印100~200 之间的素数
思想:先产生100-200之间的数,判断是否为素数,是则输出,不是则继续,直到结束。
          主要思想在于判断素数:A模2 ~(A-1)如果其中有结果为0 则A不是素数,跳出循环进行下一个数。
          如果模到A-1结果不为0,则A是素数,输出A。
    
代码实现: 
void Prime()
{
	int count=0;                   //记录素数总个数
	int i = 0;
	for(i=100;i<=200;++i)         //产生100-200之间的数
	{                              //判断素数
		int j = 0;
		for(j=2;j<i;++j)      //产生2-(i-1)
		{
			if(i%j==0)    //如果模为0;则跳出
			{
				break;
			}
		}                     //如果是break跳过来,则i!=j,如果是循环至结束,则i==j;
		if(i==j))
		{
			printf("%d ",i);
			count++;
		}
	}
	printf("\n %d \n",count);
}

这并不是最优的代码

优化:1.除2以外所有的偶数都不是素数,所以我们可以在产生100-200个数时。将i的初值设为101,i+=2(i=i+2)即for( i = 101; i < 200; i += 2 )
           2.一个数A如果不是素数,会由两个数a,b(a<=b)相乘得到,这两个数其中一个小于等于A开平方。即a<=√A
            eg:   27   3*9=27    3 <=  √27 我们找到3后就不必去找9,所以我们模时就可以模到√A即可,不用将2~(A-1)全部模。即for( j = 2 ; j < sqrt(i) ; ++j )
代码实现:
void Prime()
{
	int count=0;
	int i = 0;
	for(i=101;i<=200;i+=2)           //去除偶数
	{
		int j = 0;
		for(j=2;j<sqrt(i);++j)  //求平方根
		{
			if(i%j==0)
			{
				break;
			}
		}
		if( j>sqrt(i))         //是循环结束时,j>sqrt(i)    break跳转过来时  j<=sqrt
		{
			printf("%d ",i);
			count++;
		}
	}
	printf("\n %d \n",count);
}
使用sqrt()  记得包头文件  #include<math.h>
我在VS2010编译器
如果有误,希望指出

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值