zju2011保研:Twin Prime Conjecture

http://acm.hdu.edu.cn/showproblem.php?pid=3792

浙大计算机研究生保研复试上机考试-2011年

1、素数筛法

2、一次得到所有n以下的孪生素数数目保存在数组里,否则,每次输入n,在判断会超时

#include <stdio.h>
#include <string.h>

int prime[100000];
bool mark[100000];
int p[100000];
int size; 
void init()                      //素数筛法,得到10万内所有素数
{	
	int i;
	size=0;
	for (i=0;i<=100000;i++)
	{
		mark[i]=false;
	}
   for (i=2;i<=100000;i++)
   {
	   if (mark[i])
	   {
		   continue;
	   }
	   prime[size++]=i;
	   if (i>=1000)               
	   {
		   continue;
		}
	   for (int j=i*i;j<=100000;j+=i)
	   {
		   mark[j]=true;
	   }
   }
}
void ans()                      //因为超时,一次得到10万内所有孪生素数
{
	p[0]=p[1]=p[2]=p[3]=0;  
	for (int i=4;i<=100000;i++)    //从4开始遍历
	{
		if (!mark[i]&&!mark[i-2])  //符合孪生,加1
		{
			p[i]=p[i-1]+1;
		}
		else
		{
			p[i]=p[i-1];
		}
      }
}
int main()
{
   int n,i;
   memset(prime,0,sizeof(prime));
   init();                               //事先处理好
   ans();
   while (scanf("%d",&n)&&n>=0)          //输入一个数,直接查找数组相应值即可
   {
	   printf("%d\n",p[n]);
   }
   return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值