http://codeup.cn/problem.php?cid=100000591&pid=2
我把数组范围写成8位就是运行出错,改成7位就是答案错误。
另外:int范围内105097565个素数,最大素数2147483647.
int 范围-2147483648至2147483647.
16位大小-32768至32767.
2的15次方32768.
#include<stdio.h>
int p[1000010]={0};
int prime[1000010],num=0;
void Find_Prime(){
int i;
for(i=2;i<1000010;i++){
if(!p[i]){
prime[num++]=i;
int j;
for(j=2*i;j<1000010;j+=i){
p[j]=1;
}
}
}
}
int main(){
int n;
Find_Prime();
while(scanf("%d",&n),n){
int i,cnt=0;
for(i=0;i<=n/2;i++){
if((!p[i])&&(!p[n-i])){
cnt++;
}
}
printf("%d\n",cnt);
}
return 0;
}
改成双指针就可以通过
#include<stdio.h>
int p[100010]={0};
int prime[100010],num=0;
void Find_Prime(){
int i;
for(i=2;i<100010;i++){
if(!p[i]){
prime[num++]=i;
int j;
for(j=2*i;j<100010;j+=i){
p[j]=1;
}
}
}
}
int main(){
int n;
Find_Prime();
while(scanf("%d",&n),n){
int i,cnt=0;
for(i=0;i<num;i++){
int j;
for(j=num-1;j>=i;j--){
if(prime[i]+prime[j]==n){
cnt++;
break;
}else if(prime[i]+prime[j]<n){
break;
}
}
}
printf("%d\n",cnt);
}
return 0;
}