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

Check if number(s) is prime in C++

本文关键字:是否 数字 C++ 检查      更新时间:2023-10-16

我正在做一个在线挑战,遇到了一个问题!我已经在纸上算出了逻辑,但我的问题似乎不起作用。它所做的只是返回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个数字,这意味着数组将有多长,然后检查数组中的每个数字是否为素数。你知道我做错了什么吗?

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

测试。

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

看来你的循环条件不对。应该是:

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

要检查nums[i]是否可以除以j,您正在执行j%nums[i]==0,但这需要是nums[i]%j==0

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

此外,您总是设置res[0],但您希望设置res[i]

首先:要检查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。这可能对您的算法的速度略有改进。