PAT乙级1007. 素数对猜想 (20)

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

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

输入格式:每个测试输入包含1个测试用例,给出正整数N。

输出格式:每个测试用例的输出占一行,不超过N的满足猜想的素数对的个数。

输入样例:
20
输出样例:
4

【总结】:老样子,就是数字很大,然后段错误段错误段错误……
 1 #include <stdio.h>
 2 #include <math.h>
 3 int isprime(int n)  
 4 {  
 5     for (int i=2;i<=sqrt(n);i++)  
 6     {  
 7         if (n%i==0)  
 8             return 0;  
 9     }  
10     return 1;  
11 }
12 
13 int main(void){
14   int i,count=0,num=0;
15   long n;
16   int a[10192];
17   scanf("%ld",&n);
18   if(n<1||n>100000) return 0;
19 
20   for(i=3;i<=n;i+=2) {
21     if(isprime(i)) {
22     a[count]=i;
23     count++;
24     }
25   }
26   for(i=0;i<count;i++) {
27     if(a[i+1]-a[i]==2) num++;
28   }
29   printf("%d",num);
30   return 0;
31 }

 

17.12.10

 1 #include <stdio.h>
 2 #include <math.h>
 3 int isprime(int n)  
 4 {  
 5     for (int i=2;i<=sqrt(n*1.0);i++)  
 6     {  
 7         if (n%i==0)  
 8             return 0;  
 9     }  
10     return 1;  
11 }
12 
13 int main()
14 {
15   int i,count=0,num=0;
16   long int n;
17   long int n_qian=0;
18   long int n_hou=0;
19   scanf("%ld",&n);
20 
21   for(i=3;i<=n;i+=2) {
22       if(isprime(i)) {
23           n_qian=n_hou;
24           n_hou=i;
25           if(n_hou-n_qian==2) num++;
26       }
27   }
28 
29   printf("%d",num);
30   return 0;
31 }

改了一下。

posted @ 2017-09-19 11:13  水草精  阅读(139)  评论(0编辑  收藏  举报