C++ 显示素数的程序
我必须做一个函数,使用两个先前引用的输入来显示两个数字之间的所有素数,输入称为imin,imax,我们得到的代码部分是C++ 显示素数的程序,c++,function,primes,C++,Function,Primes,我必须做一个函数,使用两个先前引用的输入来显示两个数字之间的所有素数,输入称为imin,imax,我们得到的代码部分是 cout << "Primes:"; for (int j = imin; j <= imax; j++) { if (is_prime(j)) { cout << " " << j; } } cout#包括 使用名称空间std; 布尔是素数(int j) { 布尔素数(真); 对于(int
cout << "Primes:";
for (int j = imin; j <= imax; j++) {
if (is_prime(j))
{
cout << " " << j;
}
}
cout#包括
使用名称空间std;
布尔是素数(int j)
{
布尔素数(真);
对于(int k=2;k cout函数的最后一行:
返回真值
无论数字是否为素数,都将始终返回true,因此显示所有数字。如果将任何数字“n”作为参数传递给为素数(n),它将始终返回true。我可以找到三个错误:
- 数字应该被认为是素数,除非你们能证明其他(找到一个除数)-行:
bool素数(false);
- 若你们找到一个除数,那个么这个数就不是素数——当
j%k==0
时,但在你们的代码中你们有相反的东西
- 当你证明一个数不是素数时,就不需要继续计算了
亲自编写函数比用蹩脚的英语解释函数错误的原因更简单。:)
bool是素数(无符号整数值)
{
布尔素数=(值==2)| |(值%2&&value!=1);
对于(无符号整数j=3;素数和&j
for语句可以写成
for ( unsigned int j = 3; prime && j * j <= value; j += 2 )
for(unsigned int j=3;prime&&j*j您的代码中有一些错误
首先,当j%k等于零时,这个数字不是素数。
第二,你必须处理inf号到2号。它们需要特殊处理
我对你的代码做了一些修改。请看:
bool is_prime(int j)
{
for (int k = 2; k < j; k++)
if (j % k == 0)
return (false);
if (j < 2)
return (false);
return (true);
}
循环停止原因k等于j。
函数返回true,数字5为素数
现在假设j是数字10,让我们看看有什么变化:
if (j % k == 0) With k moving from 2 to (j - 1) so 9
if (10 % 2 == 0) -> true, function return false
10号不是素数
如果您有任何问题,欢迎提问。:您的代码中有错误,素数只有两个因子,即1和数字本身,因此代码应如下所示:
bool is_prime( int j)
{
bool primes(false);
for (int k = 2; k < j; k++)
{
if (j%k == 0) // if (k mod j == 0)
{
primes = false;
break; //if number is divisible in between then retrun false and break the loop
}
else if (j%k !=0)
{
primes = true;
}
}
return primes;
}
bool是素数(intj)
{
布尔素数(假);
对于(int k=2;k
请尝试该代码,如果出现错误,请告诉我。首先,您应该删除任何偶数素数候选项:
if (imin < 2) // no primes < 2 :
return;
cout << "Primes:";
if (imin == 2)
cout << " " << i;
imin = imin + ((imin & 0x1) == 0); // advance to next odd number.
如果这是家庭作业,那么它真的应该被标记为家庭作业。这样我们就可以帮助你指出正确的方向,而不是为你做家庭作业。@MatBailie我正准备用同样的话发表评论!就像我说的,我是新来的,我甚至不知道这是一个选项。感谢tipI没有足够的声誉让标记回家我刚试过。家庭作业标签不推荐使用。成千上万的用户花费数小时将其从以前使用过的所有帖子中删除…当我输入返回素数时,输出是空的。当你发现它不是素数时,你可能还想打断它,它可以重新分配变量并给出一个假/正的ASIBA Vlad,非常感谢
if (j % k == 0) With k moving from 2 to (j - 1) so 4
if (5 % 2 == 0) -> false, loop continue
if (5 % 3 == 0) -> false, loop continue
if (5 % 4 == 0) -> false, loop continue
if (j % k == 0) With k moving from 2 to (j - 1) so 9
if (10 % 2 == 0) -> true, function return false
bool is_prime( int j)
{
bool primes(false);
for (int k = 2; k < j; k++)
{
if (j%k == 0) // if (k mod j == 0)
{
primes = false;
break; //if number is divisible in between then retrun false and break the loop
}
else if (j%k !=0)
{
primes = true;
}
}
return primes;
}
if (imin < 2) // no primes < 2 :
return;
cout << "Primes:";
if (imin == 2)
cout << " " << i;
imin = imin + ((imin & 0x1) == 0); // advance to next odd number.
for (int j = imin; j <= imax; j += 2) // odd candidates (j > 2) only:
{
if (is_prime(j))
cout << " " << j;
}
bool is_prime (int j)
{
// assert (j > 2 && (j & 0x1) == 1); // j > 2, j in odd:
int d, q, c = 0;
for (d = 3; !c && (q = j / d) >= d); d += 2)
c = (q * d == j); // sets c <- 1 if 'd' is a factor of 'j'
return (c == 0); // prime (true - no 'd' factor) or composite (false)
}