我正在尝试用 C 语言编写一个程序,该程序以 b = a + 2,c = b + 4 的方式查找所有连续 5 位素数(a、b、c、d、e、f)的序列, d = c + 6、e = d + 8 和 f = e + 10。
我的解决方案如下:
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <math.h>
bool IsPrime(int x){
for (int i = 2; i < x; i++){
if (x % i == 0 && x != i) return false;
}
return true;
}
int main(void){
int a,b,c,d,e,f;
for (int i = 10000; i < 99999; i++){
if (IsPrime(i) == true && IsPrime(i + 2) == true && IsPrime(i + 6) == true && IsPrime(i + 12) == true && IsPrime(i + 20) == true && IsPrime(i + 30)){
a = i;
b = i + 2;
c = i + 6;
d = i + 12;
e = i + 20;
f = i + 30;
printf("%i %i %i %i %i %i \n", a, b, c, d, e, f);
a, b, c, d, e, f = 0;
}
}
// end
}
给出以下输出:
13901 13903 13907 13913 13921 13931
21557 21559 21563 21569 21577 21587
26681 26683 26687 26693 26701 26711
28277 28279 28283 28289 28297 28307
31247 31249 31253 31259 31267 31277
33617 33619 33623 33629 33637 33647
55661 55663 55667 55673 55681 55691
68897 68899 68903 68909 68917 68927
97367 97369 97373 97379 97387 97397
但是,正确的解决方案显然是:
13901 13903 13907 13913 13921 13931 21557 21559 21563 21569 21577 21587 28277 28279 28283 28289 28297 28307 55661 55663 55667 55673 55681 55691 68897 68899 68903 68909 68917 68927
如您所见,我的解决方案(上面的第一个输出集)包含正确解决方案(上面的第二个输出集)中的所有素数序列,以及一些额外的解决方案。我被告知我的解决方案在 a、b、c、d、e 和 f 之间有多余的素数,这就是为什么正确的解决方案包含更少的解决方案。有人可以解释为什么我的输出中的某些行是多余的(它们似乎符合问题的主要条件)?另外,如何从我的解决方案中消除冗余集?