1

我想编写一些代码,它采用任何正数、偶数(大于 2)并给我求和到这个数字的最小素数对。我需要这个程序来处理任何长达 9 位的整数。

我的目标是制作如下所示的东西:

Please enter a positive even integer ( greater than 2 ) :
10
The first primes adding : 3+7=10.
Please enter a positive even integer ( greater than 2 ) :
160
The first primes adding : 3+157=160.
Please enter a positive even integer ( greater than 2 ) :
18456
The first primes adding : 5+18451=18456.

除了stdio.h,我不想使用任何库。除了最基本的工具箱之外,我不想使用数组、字符串或其他任何东西:scanf、printf、for、while、do-while、if、else if、break、continue 和基本运算符(<、>、 ==、=+、!=、%、*、/ 等...)。请不要使用其他功能,尤其是 is_prime。

我知道如何将输入限制为我的需要,以便它循环直到给出有效条目。

所以现在我正在尝试找出算法。

我想像这样开始一个while循环:

  #include <stdio.h>
long first, second, sum, goldbach, min;
long a,b,i,k; //indices

int main (){

    while (1){
        printf("Please enter a positive integer :\n");
        scanf("%ld",&goldbach);
        if ((goldbach>2)&&((goldbach%2)==0)) break;
        else printf("Wrong input, ");
        }

    while (sum!=goldbach){
        for (a=3;a<goldbach;a=(a+2))
            for (i=2;(goldbach-a)%i;i++)
                first = a;
        for (b=5;b<goldbach;b=(b+2))
            for (k=2;(goldbach-b)%k;k++)
        sum = first + second;
        }
}
4

1 回答 1

2

具有测试素数的功能

int is_prime(unsigned long n)

然后你只需要测试是否agoldbach - a都是素数。你当然可以假设a <= goldbach/2

并且一定要goldbach = 4正确处理。

如果需求不允许定义和使用您自己的函数,请先忽略它们。使用您认为有用且方便的任何功能来解决问题。当您有一个使用不允许的功能的有效解决方案时,您开始用允许的构造替换它。自定义函数可以直接内联,将 替换为return赋值,因此if (is_prime(a))您可以使用代码来确定是否a为素数,而不是对结果进行return赋值is_prime = result;并测试该变量if (is_prime)。在你使用过库函数的地方,自己重新实现它们——效率并不重要——然后也内联它们。

于 2012-04-10T11:23:45.723 回答