(c语言)PAT乙级 1007 素数对猜想 (20分)

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

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

输入格式:
输入在一行给出正整数N。

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

输入样例:
20

输出样例:
4

解题思路:首先我们将2赋给first作为第一个素数,找出下一个素数并马上对他们的差与2比较,若等于2则计数加一,然后不论是否相等都将下一个素数赋给first进行下一次运算。当超过N时停止并输出计数结果。

#include<stdio.h>
#include<math.h>
int main()
{
   int i,j,k,m,r=0,first=2;
   scanf("%d",&i);
   for(j=3;j<=i;j++){
	   m=1;
	    for(k=2;k<=sqrt(j*1.0);k++){
			if(j%k==0){
		     m=0;
			 break;
		   }
	   }  
     if(m==1){
		 if(j-first==2){
		    r++;
		 }
			first=j; 
      }
    }
  
  printf("%d",r);
}

判断是否是素数的方法就是用每一个小于该数但大于1的数字除该数,若可以整除则不为素数。这里有一个小技巧,只需让大于1且小于根号该数的数除该数就行,可以减小计算量。
大家觉得有帮助的话帮忙点点赞哟!

你可能感兴趣的:(PAT乙级)