检查数字在C++中是否为素数
Check if number(s) is prime in C++
我正在做一个在线挑战,遇到了一个问题!我已经在纸上算出了逻辑,但我的问题似乎不起作用。它所做的只是返回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
。这可能对您的算法的速度略有改进。
相关文章:
- 检查输入是否不是整数或数字
- 用于检查数字是否有数字或可被该数字的值整除的程序
- 如何知道n!是否可以表示为三个连续数字的乘法?
- 如何将 UTF-8 文本从文件转换为某个可以迭代的容器,并检查每个符号是否为C++字母数字?
- 如何使用递归检查数字是否有重复数字?
- 查找数字是否为 2 的幂的时间复杂度
- 将 C 函数转换为 C++ 以检查数字是否有效
- C ++:检查它是否是类中的数字
- 检查数字是否为素数的算法
- 如何检查用户的输入是否有效以及我正在寻找的数字?
- 找到 x^n 的所有组合,并检查它们的总和是否等于一个不包括相同数字的数字
- 是否有一个 std::set 函数来确定不超过数字 x 的最大元素?
- 如何确定integer_sequence在编译时是否包含给定的数字?
- 有没有办法检查用户输入是否是数字?
- 如何知道文本文件中的输入是否是 C++ 中的有效数字
- C++:这两种将数字写入矩阵的方式之间是否存在显着的速度差异?
- 如何检查cin是否与数组中的一组数字匹配
- 如何检查字符串是否包含所有这些:数字、字母和特殊字符
- 在C/C++中检查数字是否为整数(不带scanf/gets/etc)
- 检查字符串是否是数字,然后将该数字转换为 int?