我想知道我可以在我的程序中调试或发现错误时得到一些帮助。目标是获取用户输入,然后将输入的素数显示为零,最大素数到最低值。
问题是输出包括用户输入,其本身可能是素数,也可能不是素数,并且重复素数几次:( 另外,我想知道为什么2不包括在内?
我的代码:
#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;
}
我的输出:
请输入您希望倒数的素数。 15
15 13 13 13 13 13 13 13 13 13 13 13 11 11 11 11 11 11 11 11 11 9 7 7 7 7 7 5 5 5 3
感谢那些帮助的人!
答案 0 :(得分:1)
这是一个程序,它告诉输入数字是否为素数。任何数字都可以被一个总是小于它的数字整除。 在素数的情况下,它们可以完全被1和它自身整除; 所以我使用了一个计数器变量,它计算一个数字可以被一个或多个数字完全整除的次数。 对于素数,计数总是2,对于其他数字,计数将超过2。 数量为1比1 ... 所以该计划如下......
#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();
}
打印小于作为输入给出的数字的所有素数;代码如下:
#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();
}
答案 1 :(得分:0)
对于第一个问题:
对于9,当division == 2
,9 % 2 ==1
时,打印9。比你应该有一个标志值来表示数字是否为素数,并在你确定后打印数字它是素数。
For 2,EDIT:当prime == 2
时,因为division < prime
是内循环执行的条件,内循环退出而不运行。所有学分都归Marlon所有!
答案 2 :(得分:0)
试试此代码
#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;
}
答案 3 :(得分:0)
检查你的内在循环。每次运行循环,初始化程序重置为2.然后你在疑似素数上做Mod 2。如果你得到0,你真正知道的是数字是偶数。这可能会让你快速说出这个数字不是素数,但是2 mod 2是0,而2是素数。循环之后,“除法”变为3. 15 mod 3为0.此时,你突破循环,但15不是素数。检查您的算法以确定素数。你可以检查已知的素数,但这不够动态。还有其他方法,其中一种方法围绕确定可疑素数的平方根。最后,你可以做一些旧的(长)纸笔调试。
答案 4 :(得分:0)
你的内循环不正确。它不是印刷素数,只是奇数。它检查在第一次迭代期间一个数字是否可被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;
}