题解 | #查找组成一个偶数最接近的两个素数#
查找组成一个偶数最接近的两个素数
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; } } }