程序设计基础(第3版)习题4.21

编写程序,验证哥德巴赫猜想:

(1)任意一个大偶数都可以分解成两个素数之和。随机产生10个大于6的偶数进行验证,并输出每个偶数的分解结果。

(2)任意一个大奇数都可以分解为3个素数之和。随机产生10个大于5的奇数进行验证,并输出每个奇数的分解结果。

注意点:unsigned long long   和   %llu 

#include 
int isPrime(unsigned long long n){
    for(unsigned long long i=2;i<=n/2;i++){
        if(n%i==0){
            return 0;
        }
    }
    return 1;
}
int main(void) {
    printf("请输入大于5的正整数:");
    unsigned long long n;
    scanf("%llu",&n);
    while(n>0){
        unsigned long long i,j,k;
        if(n%2==0){
            for(i=2;i<=n/2;i++){
                if(isPrime(i)&&isPrime(n-i)){
                    printf("%llu = %llu + %llu\n",n,i,n-i);
                    }      
            }
        }else{
            for(i=2;i<=n/2;i++){
                for(j=2;j<=n/2;j++){
                    for(k=2;k

chatgpt优化版:

  1. 在 isPrime 函数中,增加了对小于等于1的数的判断,直接返回0,避免了不必要的计算。

  2. 在 decompose_odd 函数中,优化了内层循环的范围,减少了不必要的迭代次数。

 

#include
int isPrime(unsigned long long n) {
    if (n <= 1) {
        return 0;
    }
    for (unsigned long long i = 2; i * i <= n; i++) {
        if (n % i == 0) {
            return 0;
        }
    }
    return 1;
}

void decompose_even(unsigned long long n) {
    for (unsigned long long i = 2; i <= n / 2; i++) {
        if (isPrime(i) && isPrime(n - i)) {
            printf("%llu = %llu + %llu\n", n, i, n - i);
            return;
        }
    }
}

void decompose_odd(unsigned long long n) {
    for (unsigned long long i = 2; i <= n / 3; i++) {
        for (unsigned long long j = i; j <= (n - i) / 2; j++) {
            unsigned long long k = n - i - j;
            if (isPrime(i) && isPrime(j) && isPrime(k)) {
                printf("%llu = %llu + %llu + %llu\n", n, i, j, k);
                return;
            }
        }
    }
}

int main(void) {
    unsigned long long n;
    printf("请输入大于5的正整数:");
    scanf("%llu", &n);
    
    while (n > 5) {
        if (n % 2 == 0) {
            decompose_even(n);
        } else {
            decompose_odd(n);
        }
        
        printf("请输入大于5的正整数:");
        scanf("%llu", &n);
    }
    
    return 0;
}

你可能感兴趣的:(算法,c语言,c#)