题解 | #查找组成一个偶数最接近的两个素数#
查找组成一个偶数最接近的两个素数
http://www.nowcoder.com/practice/f8538f9ae3f1484fb137789dec6eedb9
先求得SIZE内的所有素数,再查表即可
查表从输入的偶数的半值开始向下查找,当两个值都是素数时即满足。
#include <stdio.h>
#define SIZE 1000
int prime[SIZE+1];
void getprime(void);
void checknum(int num);
int main(void)
{
int num;
getprime();
while(scanf("%d",&num)!=EOF){
checknum(num);
}
return 0;
}
void getprime(void)
{
int i,j,tmp,flag;
prime[1] = 1,prime[2] = 1,prime[3] = 1;
for(i=5; i<=SIZE; i+=2){ //偶数不是素数
tmp = sqrtf(i);
flag = 1;
for(j = 3; j <= tmp; j+=2){ //被除数不是偶数
if(i % j == 0) flag = 0;
}
if(flag) prime[i] = 1;
}
}
void checknum(int num)
{
int half,i,j;
for(i = num/2;i>=1;i--){
j = num - i;
if(prime[i] && prime[j]){
printf("%d\n%d\n",i,j);
break;
}
}
}
