在C ++中添加质数的循环

时间:2018-11-12 14:17:04

标签: c++ add

这是一个循环,应该仅添加质数而忽略非质数,但是它不能正常工作,我的技能很基础,所以请尝试尽可能简化答案,

#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;
}

1 个答案:

答案 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。然后,如果找到分隔符,则应将其分配到falsebreak

您的完整代码应如下所示:

#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;
}