【发布时间】:2013-11-10 15:17:43
【问题描述】:
我的教授让我做一个程序来测试哥德巴赫猜想。我想知道我是否应该将 1 视为素数。这是我打印素数第一个组合的代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
int n, i, j, k, l;
char prime, prime1;
do //check if n is even and greater than 2
{
printf("Give me an even natural number greater than 2:\n\n>");
scanf("%d", &n);
}
while (n % 2 != 0 && n >= 2);
for (i = 1; i < n ; i++)
{
prime = 1;
for (k = 2; k < i; k++)
if (i % k == 0)
prime = 0;
if (prime)
{
for (j = 1; j < n; j++)
{
prime1 = 1;
for (l = 2; l < j; l++)
if (j % l == 0)
prime1 = 0;
if (prime1)
if (i + j == n)
{
printf("\n\n%d and %d are the first two prime numbers that add up to %d.\n", i, j, n);
return 0;
}
}
}
}
}
我上网查了一下,几乎每个人都说 1 不是素数。我该怎么办?保持程序原样或更改它以使其不会将 1 视为素数?我该怎么做? :P
【问题讨论】:
-
哥德巴赫本人认为 1 是素数,因此似乎可以跟随他的领导,并且不会对验证练习产生任何影响。
-
如果 1 是素数,则素数分解不是唯一的。
-
对于二元哥德巴赫猜想:
while (n % 2 != 0 || n <= 2);,两次...? -
你的 do-while 循环是错误的。你必须要求 n
标签: c primes goldbach-conjecture