我一直在开发这个程序来计算两个值之间有多少个孪生素数,并且已经指定孪生素数是(6n-1,6n+1)格式的,除了(3,5)。我的代码似乎工作得很好,但它总是给我错误的结果……比我应该得到的少了一对孪生素数。在1到40之间,我们应该有5个双素数,但我总是得到4。é
我做错什么了?我没有考虑(3,5)吗?
这是我的代码:

#include <stdio.h>

int prime (int num) {
    int div;
    if (num == 2) return 1;
    if (num % 2 == 0) return 0;
    div = 3;
    while (div*div <= num && num%div != 0)
        div = div + 2;
    if (num%div == 0)
        return 0;
    else
        return 1;
}

int main(void) {
    int low, high, i, count, n, m;
    printf("Please enter the values for the lower and upper limits of the interval\n");
    scanf("%d%d", &low, &high);
    printf("THIS IS THE LOW  %d\n AND THIS IS THE HIGH %d\n", low, high);
    i = low;
    count = 0;
    while (6*i-1>=low && 6*i+1<=high) {
        n = 6*i-1;
        m = 6*i+1;
        if (prime(n) && prime(m)) ++count;
        i = i + 1;
    }
    printf("Number of twin primes is %d\n", count);
    return 0;
}

最佳答案

您的程序未命中(35),因为3不是素数,而且4不是6的倍数。而不是主循环步进(有效地)6,这个答案步进1。

#include <stdio.h>

int prime (int num) {
    int div;
    if (num == 1) return 0;             // excluded 1
    if (num == 2 || num == 3) return 1; // included 3 too
    if (num % 2 == 0) return 0;
    div = 3;
    while (div*div <= num) {
        if (num % div == 0)             // moved to within loop
            return 0;
        div += 2;
    }
    return 1;
}

int main(void) {
    int low, high, i, count, n, m;
    printf("Please enter the values for the lower and upper limits of the interval\n");
    scanf("%d%d", &low, &high);
    printf("THIS IS THE LOW  %d\n AND THIS IS THE HIGH %d\n", low, high);
    count = 0;
    for (i=low; i<=high; i++) {
        n = i-1;
        m = i+1;
        if (prime(n) && prime(m)) {
            printf ("%2d %2d\n", n, m);
            ++count;
        }
    }
    printf("Number of twin primes is %d\n", count);
    return 0;
}

程序输出
1
40
THIS IS THE LOW  1
 AND THIS IS THE HIGH 40
 3  5
 5  7
11 13
17 19
29 31
Number of twin primes is 5

下一次跑步:
3
10
THIS IS THE LOW  3
 AND THIS IS THE HIGH 10
 3  5
 5  7
Number of twin primes is 2

关于objective-c - 2个值之间的双头奖错误结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28462441/

10-14 21:37
查看更多