我想写一些代码,它接受任何正数,偶数(大于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、if、else if、break、continue和基本运算符(,==,=+,),我不想使用数组、字符串或任何其他东西!=,%,*,/等)。
请不要使用其他功能,尤其是高级功能。
我知道如何将输入限制为我的需要,以便在给定有效条目之前循环输入。
所以现在我想找出算法。
我想像这样开始一段时间的循环:
#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;
}
}
最佳答案
有测试素性的功能
int is_prime(unsigned long n)
然后你只需要测试
a
和goldbach - a
是否都是素数。你当然可以假设a <= goldbach/2
。并确保正确处理
goldbach = 4
。如果需求不允许定义和使用自己的函数,请先忽略它们。使用任何你认为有用和方便的函数来解决问题。当您有一个使用不允许的功能的工作解决方案时,就开始用允许的构造替换它。自定义函数可以直接内联,用赋值替换
return
,因此您可以用代码来确定if (is_prime(a))
是否是素数,而不是用赋值结果来测试变量a
。在使用了库函数的地方,可以自己重新实现它们—效率无关紧要—然后也可以内联它们。