HDU 2138(求素数的个数,容易超时!提醒自己)

spoiler posted @ 2011年4月16日 17:10 in 未分类 , 1542 阅读

题目分析:这里不能打表,然后要用到求素数的 优化!也就是我 前面一篇文章提到的。代码直接注释一下就可以了 还是看代码吧

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
bool prime(int x){
	if(x%2==0&&x!=2)
		return false;
         //偶数肯定不是素数!
	double k=sqrt(x);
        //切记这里一定要用k记录他的开方
        //如果写成for(int i=3;i*i<=x;i+=2)
        //就超时!
	for(int i=3;i<=k;i+=2)//枚举奇数!
		if(x%i==0)
			return false;
	return true;
}
int main(){
	int cas,n,flag,ans=0;
	while(~scanf("%d",&cas)){
		ans=0;
		while(cas--){
			scanf("%d",&n);
			if(prime(n))
				ans++;
		}
		printf("%d\n",ans);
	}
	return 0;
}

 


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter