PAT--1007 素数对猜想(20 分)

版权声明:转载请附上链接,虽然我都不信有人转。 https://blog.csdn.net/gezhishigechuan_/article/details/82223819

1007 素数对猜想(20 分)

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

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

输入格式:

输入在一行给出正整数N

输出格式:

在一行中输出不超过N的满足猜想的素数对的个数。

输入样例:

20

输出样例:

4

无难度,不作分析。 

/*总分:20,得分:20*/

#include<stdio.h>
#define YES 1
#define NO 0
int is_prime(int x);
int find_prime_grps(int num);
int main(){
	int N;
	int grps;
	scanf("%d",&N);
	if(N<=0||N>=1e5)//判断数据合法性 
		return 1;
	grps=find_prime_grps(N);
	printf("%d",grps);
	return 0;
}
int is_prime(int x){//此函数目的是判断x是否为素数,这是最基础的算法,可自行更改更好的算法 
	int flag=0;
	int n=2;
	while(n*n<=x){
		if(x%n==0){
			flag=1;	//注意:此时为非素数 
			break;
		}
		n++;
	}
	if(!flag)
		return YES;
	else
		return NO;
}
int find_prime_grps(int num){//求最大数2~num中满足题意的素数对 
	int num_of_grps=0;
	int front=0;
	int div=0;
	for(int i=2;i<=num;i++){//i为不大于num的值,每两个相邻素数需要测试是否满足题意 
		if(is_prime(i)){
			if(i!=2)//2为第一个素数,前面无素数与之比较,故不作处理 
				div=i-front;//div定义为后者素数与前者素数的差值,front定义为i前面的那个素数 
			if(div==2)
				num_of_grps++;
			front=i;
		}
	}
	return num_of_grps;
}

猜你喜欢

转载自blog.csdn.net/gezhishigechuan_/article/details/82223819
今日推荐