检查C ++中的数字是否为素数

时间:2013-04-06 21:29:17

标签: c++ arrays algorithm primes

我正在进行在线挑战并遇到一个问题!我已经在纸上制定了逻辑,但似乎我的问题不起作用。它只是返回0作为输出。

到目前为止我的代码:

#include <iostream>

using namespace std;

int main()
{
    int n;
    cin >> n;
    int nums[50];
    string res[50];
    int o = 0;
    for(int i=0;i<n;i++)
    {
        cin >> nums[i];
    }
    for(int i=0;i<n;i++)
    {
        int deliteli=1;
        for(int j=1;j<=nums[i];j++)
        {
            if(nums[i]%j==0)
            {
                deliteli++;
            }
        }
        if(deliteli == 2){
            res[0] = "YES";
            o++;
        }
        else if(deliteli != 2){
            res[0] = "NO";
            o++;
        }
    }
    for(int i=0;i<o;i++)
    {
        cout << res[i] << endl;
    }
    return 0;
}

我正在做的是首先输入N数字,这意味着数组将持续多长时间,然后检查数组中的每个数字是否为素数。我有什么想法吗?

4 个答案:

答案 0 :(得分:2)

for(int j=1;j>=nums[i];j++)
{
   ...
}

好像你的循环条件错了。它应该是:

for(int j=1;j<=nums[i];j++) //Change here
{
   ...
}

答案 1 :(得分:2)

要检查nums[i]是否可以按j划分j%nums[i]==0,但需要nums[i]%j==0

您的deliteli计数器也有问题。 您需要为每个数字重新初始化它,否则它只会添加到它。

此外,您始终设置res[0],但您需要设置res[i]

答案 2 :(得分:2)

  • deliteli应从0开始。

  • deliteli应该在循环开始时重置。

  • 您使用res[i]代替res[0],否则您将继续覆盖第一个元素。

  • j%nums[i]应为nums[i]%j,因为a%b会将余下的a除以b

  • '仅适用于单个字符(C ++非常高兴允许不允许编译和运行的内容)。 "用于字符串。

最终代码:

#include <iostream>

using namespace std;

int main()
{
    int n;
    cin >> n;
    int nums[50];
    string res[50];
    int o = 0;
    for(int i=0;i<n;i++)
    {
        cin >> nums[i];
    }
    for(int i=0;i<n;i++)
    {
        int deliteli=0;
        for(int j=1;j<=nums[i];j++)
        {
            if(nums[i]%j==0)
            {
                deliteli++;
            }
        }
        if(deliteli == 2){
            res[i] = "YES";
            o++;
        }
        else if(deliteli != 2){
            res[i] = "NO";
            o++;
        }
    }
    for(int i=0;i<o;i++)
    {
        cout << res[i] << endl;
    }
    return 0;
}

Test

答案 3 :(得分:1)

首先:检查nums[i]是否可以按j划分j%nums[i]==0,但需要nums[i]%j==0

第二: 改变for(int j=1;j>=nums[i];j++)for(int j=1;j<=nums[i];j++)

和最后:你没有来测试nums[i]nums[i]只是为了平方根,所以改变它到sqrt(nums[i])+1。它可能会略微提高算法的速度。