[PTA] 素数猜想 超时待优化

7-1 素数对猜想(20 分)

让我们定义dn为:dn=pn+1pn,其中pi是第i个素数。显然有d1=1,且对于n>1dn是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。

现给定任意正整数 N( <105),请计算不超过 N的满足猜想的素数对的个数。

<textarea readonly="readonly" name="code">#include <stdio.h>
#include <math.h>
int isprime(int num)
{
	if(num==1) return 0;
	if(num==2||num==3) return 1;
	else
	{
		int i;
		for(i=2;i<=sqrt(num);i++)
		{
			if(num%i==0) return 0;
		}
	}
	return 1;
}
int main()
{
	int N;
	scanf("%d",&N);
	int a[100001]={0};
	int i;
	int j=1;
	for(i=1;i<=N;i++)
	{
		for(;;j++){
			if(isprime(j)){
			a[i]=j;
			j++;
			break;	
			}
		}
	}int count=0;
	i=1;
	while(a[i+1]<=N)
	{
		int x=a[i+1]-a[i];
		if(x==2) count++;
		i++;
	}
	printf("%d\n",count);
	return 0;
 } </textarea>

Summary:最后一个测试点超时,待优化算法,应该是循环过多。
——————————————————————————————————————分界线———————————
<textarea readonly="readonly " name ="code">bool isPrime_3( int num )
{
                 //两个较小数另外处理
                 if(num ==2|| num==3 )
                                 return 1 ;
                 //不在6的倍数两侧的一定不是质数
                 if(num %6!= 1&&num %6!= 5)
                                 return 0 ;
                 int tmp =sqrt( num);
                 //在6的倍数两侧的也可能不是质数
                 for(int i= 5;i <=tmp; i+=6 )
                                 if(num %i== 0||num %(i+ 2)==0 )
                                                 return 0 ;
                 //排除所有,剩余的是质数
                 return 1 ;
}
</textarea>

效率更高的判断素数的方法

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值