C++ 简单素数程序。。。。我的代码/脚本有什么问题?
我想知道我能在调试或发现程序中的错误方面得到一些帮助。目标是获取用户输入,然后显示从输入到零、从最大素数到最低素数的素数 问题在于,输出包括用户输入,用户输入本身可能是素数,也可能不是素数,并重复素数数次:( 另外,我想知道为什么不包括2 我的代码:C++ 简单素数程序。。。。我的代码/脚本有什么问题?,c++,loops,for-loop,numbers,C++,Loops,For Loop,Numbers,我想知道我能在调试或发现程序中的错误方面得到一些帮助。目标是获取用户输入,然后显示从输入到零、从最大素数到最低素数的素数 问题在于,输出包括用户输入,用户输入本身可能是素数,也可能不是素数,并重复素数数次:( 另外,我想知道为什么不包括2 我的代码: #include <iostream> #include <cmath> using namespace std; int main() { int prime, division, input; cout
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int prime, division, input;
cout << "Please enter a number you wish to count down prime numbers from." << endl;
cin >> input;
for (prime = input ; prime >=2 ; prime-- )
{
for (division = 2 ; division < prime ; division++ )
{
if (prime % division == 0)
{
break;
}
else
{
cout << prime << " ";
}
}
}
return 0;
}
#包括
#包括
使用名称空间std;
int main()
{
整数素数,除法,输入;
不能输入;
对于(素数=输入;素数>=2;素数--)
{
对于(除法=2;除法<素数;除法++)
{
if(素数%除法==0)
{
打破
}
其他的
{
cout对于第一个问题:
对于9,当division==2
时,9%2==1
,则打印9。而不应使用标志值来指示数字是否为素数,并在确定该数字为素数后打印该数字
对于2,编辑:当prime==2
时,因为division
是执行内部循环的条件,所以内部循环不运行就退出。所有信用都归Marlon!试试这个代码
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int prime, division, input;
cout << "Please enter a number you wish to count down prime numbers from." << endl;
cin >> input;
for (prime = input ; prime >=2 ; prime--)
{
boolean isDivisible = false;
for (division = 2 ; division < prime ; division ++)
{
if (prime % division == 0)
{
isDivisible = true;
}
}
if (isDivisible == false)
{
cout << prime << " ";
}
}
return 0;
}
#包括
#包括
使用名称空间std;
int main()
{
整数素数,除法,输入;
不能输入;
对于(素数=输入;素数>=2;素数--)
{
布尔值isDivisible=false;
对于(除法=2;除法<素数;除法++)
{
if(素数%除法==0)
{
isDivisible=true;
}
}
如果(isDivisible==false)
{
cout检查内部for循环。每次运行循环时,初始值设定项都会重置为2。然后对可疑的素数执行Mod 2。如果得到0,您真正知道的是该数是偶数。这可能会导致您很快说该数不是素数,但2 Mod 2是0,2是素数。在循环之后,“除法”变为3。15 mod 3是0。在这一点上,你打破了循环,但15不是素数。检查你的确定素数的算法。你可以让它检查已知素数,但这不够动态。还有其他方法,其中之一是围绕确定可疑素数的平方根。最后,你可以做一些尝试od旧(长)纸笔调试。您的内部循环不正确。它不是打印素数,只是奇数。它检查一个数字在第一次迭代中是否可以被2整除,并且一个偶数总是可以被整除。因此,如果该数字是偶数,内部循环总是会中断,但如果是奇数,它会打印该数字,并继续这样做,直到循环结束终止或终止
让我们试着用一个例子来说明这一点,外循环是9。内循环将检查它是否可被2整除,因为它不是。它将打印出数字并再次继续。下一次迭代将检查它是否可被3整除,因为它是
试着用一个函数来检查一个数是否是素数,这使它更模块化
bool prime(int num)
{
int root = sqrt(num);
if(num == 2)
return true;
if(num%2 == 0)
return false;
for(int i=3;i<=root+1;i=i+2)
if(num % i == 0)
return false;
return true;
}
bool素数(int num)
{
int root=sqrt(num);
如果(num==2)
返回true;
如果(数值%2==0)
返回false;
对于(inti=3;i这是一个程序,它告诉你输入的数字是否是素数。任何数字都可以被一个总是小于它的数字整除。
对于素数,它们完全可以被1和它本身整除;
所以我使用了一个计数器变量,它计算一个数被一个或多个小于它的数完全整除的次数。
素数的计数将始终为2,而其他素数的计数将超过2。
计数将是一对一。。。
所以程序如下
#include<iostream.h>
#include<conio.h>
class prime
{
int a;
public:
void check();
};
void prime::check()
{
cout<<"Insert a number";
cin>>a;
int count=0;
for(int i=a;i>=1;i--)
{
if(a%i==0)
{
count++;
}
}
if(count==1)
{
cout<<"\nOne is neither prime nor composite";
}
if(count>2)
{
cout<<"\nthe number is not prime its composite" ;
}
if(count==2)
{
cout<<"\nthe numner is prime";
}
}
void main()
{
clrscr();
prime k;
k.check();
getch();
}
#包括
#包括
类素数
{
INTA;
公众:
无效检查();
};
void prime::check()
{
库塔;
整数计数=0;
对于(int i=a;i>=1;i--)
{
如果(a%i==0)
{
计数++;
}
}
如果(计数=1)
{
对于他的第二个问题,当prime
为2时,第二个循环的条件将计算为false(2<2
),并立即退出循环。有一件事不是你的问题:除法只需向上(包括)sqrt(prime)@马龙啊,废话,说得太快了。谢谢!谢谢你的贡献。@Marlon,如果我想修正这个表达式,我可以简单地把它改成除法吗@albertoroberto:first:不要改成除法,否则素数%prime永远是0,那么你就永远不会得到素数了!只要修正第一部分,第二部分也会是修正了。你可以用一个布尔值来检查当前的“素数”是否为素数;在内部循环完成后,如果您仍然确定它是素数,请打印它;无论何时您发现它是复合数,请将布尔值更改为false。您应该创建一个单独的函数来查找数字是否为素数。对于数字n,除了它本身之外,它不会与大于n/2的数字相乘。Us这是为了提高效率。对于15,从8到14不会有倍数。Script。C++不是脚本语言,你输入的名字是代码或程序,不是脚本。谢谢布莱恩!它对布尔变量很好,但是我想知道你是否知道没有它的方法会怎样?我正在网上学习,一个d只能使用所涵盖章节中的知识:(布尔变量在这里也很好:)您考虑过吗
#include<iostream.h>
#include<stdio.h>
#include<conio.h>
class prime
{
int a;
int i;
public:
void display();
};
void prime::display()
{
cout<<"Enter any number to find primes less than it";
cin>>a;
int count=0;
for(int j=a;j>=1;j--)
{
for(int i=1;i<=j;i++)
{
if(j%i==0)
{
count++;
}
}
if(count==2)
{
cout<<"\n"<<j;
}
count=0;
}
}
void main()
{
clrscr();
prime k;
k.display();
getch();
}