Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
实施哥德巴赫';C代码中的s猜想_C_Algorithm_Math_Primes_Goldbach Conjecture - Fatal编程技术网

实施哥德巴赫';C代码中的s猜想

实施哥德巴赫';C代码中的s猜想,c,algorithm,math,primes,goldbach-conjecture,C,Algorithm,Math,Primes,Goldbach Conjecture,我真的被困在这里了。在过去的8个小时里,我一直在试着得到这个 我试着用哥德巴赫猜想把数字打印成素数之和。一旦它打印出数字n,它应该移动到n+1,直到达到上限 现在我有了这个 999983 = 999983 + 0 #包括 int素数(int num); int main(){ 整数上,下,模板,x; printf(“输入下限:”); 扫描频率(“%d”及更低); printf(“输入上限:”); scanf(“%d”及以上); 对于(lower;lower有一个致命错误: #include &

我真的被困在这里了。在过去的8个小时里,我一直在试着得到这个

我试着用哥德巴赫猜想把数字打印成素数之和。一旦它打印出数字n,它应该移动到n+1,直到达到上限

现在我有了这个

999983 = 999983 + 0
#包括
int素数(int num);
int main(){
整数上,下,模板,x;
printf(“输入下限:”);
扫描频率(“%d”及更低);
printf(“输入上限:”);
scanf(“%d”及以上);

对于(lower;lower有一个致命错误:

#include <stdio.h>

int prime(int num);

int main() {
    int upper, lower, tempL, x;

    printf("Enter lower limit:");
    scanf("%d", &lower);

    printf("Enter upper limit:");
    scanf("%d", &upper);

    for (lower; lower <= upper; lower + 2) {
        tempL = lower;
        for (tempL; tempL != 0; tempL--) {
            if (prime(tempL == 0) { //after decrementing we find a prime
                x = lower - (tempL); x = the original lower limit minus the current decremented lower limit
                if (prime(x) == 0) { //if x if prime do following
                    printf("%d = %d + %d\n", tempL, lower, x); //print
                    break;
                }
            }
        }
    }
}          

int prime(int number) { //returns 0 if number is prime
    int i;
    for (i = 2; i < number / 2; i++) {
        if (number % i == 0) {
            return 1;
        }
    }
    return 0;
}
tempL==0是一个比较tempL和0的表达式;如果tempL=0,则结果为1,否则为0。因此,可以调用prime(1)或prime(0)。在这两种情况下,prime()函数都返回0,因此永远不会执行if

哦,我又做了一次


函数“prime”返回的值完全错误。如果一个数字是prime,则返回0,如果不是prime,则返回1。除非数字从0到4,否则它总是返回0。这对于number=2或3是错误的,但是对于1和4是正确的…

代码中存在多个问题:

  • 您没有检查scanf的返回值,导致未定义的行为

  • 你不能在循环中增加
    lower
    for(lower;lower你的
    prime()
    函数在
    s=(int)sqrt(number);for(i=3;这里有几个问题。首先,请更改你的“for”循环:
    for(;lower)同意“使用合适的编译器并打开所有警告”。
    
    #include <stdio.h>
    
    int prime(int num);
    
    int main() {
        int upper, lower, tempL, x;
    
        printf("Enter lower limit:");
        scanf("%d", &lower);
    
        printf("Enter upper limit:");
        scanf("%d", &upper);
    
        for (lower; lower <= upper; lower + 2) {
            tempL = lower;
            for (tempL; tempL != 0; tempL--) {
                if (prime(tempL == 0) { //after decrementing we find a prime
                    x = lower - (tempL); x = the original lower limit minus the current decremented lower limit
                    if (prime(x) == 0) { //if x if prime do following
                        printf("%d = %d + %d\n", tempL, lower, x); //print
                        break;
                    }
                }
            }
        }
    }          
    
    int prime(int number) { //returns 0 if number is prime
        int i;
        for (i = 2; i < number / 2; i++) {
            if (number % i == 0) {
                return 1;
            }
        }
        return 0;
    }
    
    for(lower;lower<=upper; lower+2)
    
    if( prime(tempL == 0 )  //after decrementing we find a prime
    
    for (; lower <= upper; lower += 2)
    
    if (prime(tempL) == 0)
    
    #include <stdio.h>
    
    int isprime(int number) { //returns non zero if number is prime
        for (int i = 2; i * i <= number; i++) {
            if (number % i == 0) {
                return 0;
            }
        }
        return 1;
    }    
    
    int main(void) {
        int upper, lower;
    
        printf("Enter lower limit: ");
        if (scanf("%d", &lower) != 1)
            return 1;
    
        printf("Enter upper limit: ");
        if (scanf("%d", &upper) != 1)
            return 1;
    
        for (int n = lower; n <= upper; n += 2) {
            for (int i = 1; i <= n / 2; i++) {
                if (isprime(i) && isprime(n - i)) {
                    printf("%d = %d + %d\n", n, i, n - i);
                    break;
                }
            }
        }
        return 0;
    }