让我们定义 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 }
改了一下。