这是一个循环,应该仅添加质数而忽略非质数,但是它不能正常工作,我的技能很基础,所以请尝试尽可能简化答案,
#include <iostream>
using namespace std;
int main()
{
int n = 0, a = 0, sum = 0;
cin >> n;
for (int j = 1; j <= n; j++)
{
cin >> a;
if (a == 1)
{
continue;
}
if (a == 2 || a == 3)
{
sum += a;
}
if (a % 2 == 0)
{
continue;
}
for (int i = 3; i < a; i++)
{
if (a % i != 0)
{
sum += a;
}
else
{
continue;
}
}
}
cout << sum;
return 0;
}
答案 0 :(得分:1)
我宁愿改用此功能。您应该添加cmath
库:
bool isPrime(int number) {
if (number <= 1)
return false;
for (int i = 2; i <= sqrt(number); i++)
{
if (number % i == 0)
{
return false;
}
}
return true;
}
但是,如果您想继续执行代码,则在检查a == 2 || a == 3
之后,应该continue
。在for循环之前的最后一部分,您应该定义一些布尔值,例如bool isPrime = true
。然后,如果找到分隔符,则应将其分配到false
和break
。
您的完整代码应如下所示:
#include <iostream>
using namespace std;
int main()
{
int n = 0, a = 0, sum = 0;
cin >> n;
for (int j = 1; j <= n; j++)
{
cin >> a;
if (a == 1)
{
continue;
}
if (a == 2 || a == 3)
{
sum += a;
continue;
}
if (a % 2 == 0)
{
continue;
}
bool isPrime = true;
for (int i = 3; i < a; i++)
{
if (a % i == 0)
{
isPrime = false;
break;
}
}
if (isPrime) {
sum += a;
}
}
cout << sum;
return 0;
}