ZOJ-1951

来源:互联网 发布:recuva数据恢复 编辑:程序博客网 时间:2024/05/22 14:24

哥德巴赫猜想,首先求质数表,然后就好办了,从小遍历质数,二分查找下另个数是否在表中

#include<stdio.h>#include<string.h>#include<math.h>int is_prime(int* primes, int num){    int i, n = (int) sqrt(num);    for (i = 0; primes[i] != -1 && primes[i] <= n; i++)        if (num % primes[i] == 0)            return 0;    return 1;}int is_in_prime_array(int* primes, int len, int num){    int low = 0, high = len - 1, center = (low + high) / 2;    while (primes[center] != num)    {        if (low >= high)            return 0;        if (primes[center] < num)            low = center + 1;        else            high = center - 1;        center = (low + high) / 2;    }    return 1;}int main(){    int n, i, primes[80000], index = 0;    memset(primes, -1, 80000 * sizeof(int));    for (i = 3; i < 1000000; i += 2)        if (is_prime(primes, i))            primes[index++] = i;    while (scanf("%d", &n), n)    {        for (i = 0; i < index; i++)            if (is_in_prime_array(primes, index, n - primes[i]))            {                printf("%d = %d + %d\n", n, primes[i], n - primes[i]);                break;            }    }    return 0;}


0 0
原创粉丝点击