#include <stdio.h>
int prime(int num);
int main() {
int upper, lower, tempL, x;
printf("Enter lower limit:");
scanf("%d", &lower);
printf("Enter upper limit:");
scanf("%d", &upper);
for (lower; lower <= upper; lower + 2) {
tempL = lower;
for (lower; lower != 0; lower--) {
if (prime(lower) == 0) { //after decrementing we find a prime
x = tempL - (lower); x = the original lower limit minus the current decremented lower limit
if (prime(x) == 0) { //if x if prime do following
printf("%d = %d + %d\n", tempL, lower, x); //print
break;
}
}
}
}
}
int prime(int number) { //returns 0 if number is prime
int i;
for (i = 2; i < number / 2; i++) {
if (number % i == 0) {
return 1;
}
}
return 0;
}
这就是我到目前为止......所有这一切都是无休止地打印
999983 = 999983 + 0
我真的被困在这里了。我一直试图在过去8小时内得到这个。
我正在尝试使用Goldbach的猜想来打印数字作为素数的总和。一旦打印出数字n,它应该移动到n + 1,直到它达到上限。
现在我有了这个
#include <stdio.h>
int prime(int num);
int main() {
int upper, lower, tempL, x;
printf("Enter lower limit:");
scanf("%d", &lower);
printf("Enter upper limit:");
scanf("%d", &upper);
for (lower; lower <= upper; lower + 2) {
tempL = lower;
for (tempL; tempL != 0; tempL--) {
if (prime(tempL == 0) { //after decrementing we find a prime
x = lower - (tempL); x = the original lower limit minus the current decremented lower limit
if (prime(x) == 0) { //if x if prime do following
printf("%d = %d + %d\n", tempL, lower, x); //print
break;
}
}
}
}
}
int prime(int number) { //returns 0 if number is prime
int i;
for (i = 2; i < number / 2; i++) {
if (number % i == 0) {
return 1;
}
}
return 0;
}
但我仍然遇到同样的问题
答案 0 :(得分:4)
有致命错误:
for(lower;lower<=upper; lower+2)
如果使用合适的编译器并打开所有警告,编译器会告诉您错误的原因。我会告诉你:低+ 2只是评估表达式低+ 2,没有副作用。它没有修改低级。你可能希望它增加2,它没有。
可能会有更多错误,我不再看第一个错误了。
哦,好吧,我再次查看了代码,发现了这个:
if( prime(tempL == 0 ) //after decrementing we find a prime
tempL == 0是一个比较tempL和0的表达式;如果tempL = 0则结果为1,否则为0。所以你调用prime(1)或prime(0)。在这两种情况下,prime()函数都返回0,因此永远不会执行if。
哦,我已经完成了......
你的功能&#34;素数&#34;返回错误的值。如果数字是素数,则返回0;如果数字不是,则返回1。除非数字是从0到4,否则它总是返回0.对于数字= 2或3,这是错误的,但对1和4正确...
答案 1 :(得分:0)
您的代码中存在多个问题:
scanf
的返回值,从而导致未定义的行为。您不会在循环lower
中增加for (lower; lower <= upper; lower + 2)
。写下这个:
for (; lower <= upper; lower += 2)
你错放了if (prime(tempL == 0)
中的括号,它应该是:
if (prime(tempL) == 0)
//
x = lower - (tempL);
prime
应该返回非零表示真值,零表示虚假。称之为isprime()
以下是更正后的版本:
#include <stdio.h>
int isprime(int number) { //returns non zero if number is prime
for (int i = 2; i * i <= number; i++) {
if (number % i == 0) {
return 0;
}
}
return 1;
}
int main(void) {
int upper, lower;
printf("Enter lower limit: ");
if (scanf("%d", &lower) != 1)
return 1;
printf("Enter upper limit: ");
if (scanf("%d", &upper) != 1)
return 1;
for (int n = lower; n <= upper; n += 2) {
for (int i = 1; i <= n / 2; i++) {
if (isprime(i) && isprime(n - i)) {
printf("%d = %d + %d\n", n, i, n - i);
break;
}
}
}
return 0;
}