我编写的代码(希望)允许用户输入一个数字,并输出2和该数字(包括)之间的素数之和。但是,我在代码的倒数第二行遇到了一个问题。我已经查找了这个问题的其他解决方案,但它们似乎并没有像我一样的错误造成。这是代码:
#include <iostream>
using namespace std;
int Q;
int sum_primes(int N) {
cout << "Enter a number and I will generate the sums of the primes up to (and including) that number: ";
cin >> Q;
int i, count, sum = 0;
for(N = 1; N <= Q; N++) {
count = 0;
for(i = 2; i <= N/2; i++) {
if (N % i == 0) {
count++;
break;
}
}
if (count == 0 && N != 1)
sum = sum + N;
return N = sum;
}
}
int main() {
cout << "The sum of these primes is: " << sum_primes(int N);
return 0;
}
答案 0 :(得分:5)
cout << "..." << sum_primes(int N);
将int N
替换为数字。您已经定义了该函数,现在需要给它一个参数。
或许你想通过用户输入给出N
的价值。然后改用:
int N;
cin >> N;
cout << "The sum of these primes is: " << sum_primes(N);
此外,正如GigaWatt指出的那样,您所做的路线:
return N = sum;
是不必要的。只需返回sum
即可。
这是完整的代码:
#include <iostream>
#include <cmath>
bool isPrime(int x) {
if (x == 1) return false;
if (x == 2) return true;
bool prime = true;
for (int i = 2; i <= sqrt(x); i++) {
if (x % i == 0) { prime = false; break; }
}
return prime;
}
int sum_primes(unsigned int N) {
int sum = 0;
for ( int i = 1; i <= N; i++ ) {
if (isPrime(i)) sum += i;
}
return sum == 0 ? 1 : sum;
}
int main() {
int Q;
std::cin >> Q;
std::cout << "Sum of primes " << sum_primes(Q);
}
答案 1 :(得分:1)
此代码实际上存在多个问题。我将列出一些,但这绝不是详尽无遗的!
Q
作为参数传递给sum_primes
以及N
。return N = sum
会立即退出您的外部for
- 循环。这几乎肯定不是你想要的。我怀疑你需要寻找一个比你目前工作更好的C ++简介。我恐怕无法向你提供任何建议。
答案 2 :(得分:0)
你对sum_primes的论证是不正确的。
该函数被定义为取一个int,但你没有传递它。