C++素数判断代码
答案:4 悬赏:30 手机版
解决时间 2021-11-13 23:17
- 提问者网友:皆是孤独
- 2021-11-13 13:00
C++素数判断代码
最佳答案
- 五星知识达人网友:逃夭
- 2021-11-13 13:42
就是判断素数的一些原理,注释如下:
bool is_prime(int n) //对n进行判断
{
if(n<2) //如果n小于2就不是素数,素数规定大于或等于2的整数
return false;
for (int i=2;i*i<=n;i++) //判断是否为素数可以使用所有比n小的数与n相除,如果能除开就不是素数,但是其实只需要判断到i*i>=n就可以了,因为此时已经不存在比i大的数能把n除开啦,仔细想想就会明白啦
{
if(n % i == 0)
return false;
}
return true;
}追问如果第3行N小于2不是素数那下一步是执行哪个语句追答直接返回false,说明它不是素数追问那么他接着是不是要执行主函数里的语句并且输出NO追答是的追问for语句中如果满足条件i*i<=n后面是到if语句还是先+i再进入if语句追答是先进循环,结束后i++
bool is_prime(int n) //对n进行判断
{
if(n<2) //如果n小于2就不是素数,素数规定大于或等于2的整数
return false;
for (int i=2;i*i<=n;i++) //判断是否为素数可以使用所有比n小的数与n相除,如果能除开就不是素数,但是其实只需要判断到i*i>=n就可以了,因为此时已经不存在比i大的数能把n除开啦,仔细想想就会明白啦
{
if(n % i == 0)
return false;
}
return true;
}追问如果第3行N小于2不是素数那下一步是执行哪个语句追答直接返回false,说明它不是素数追问那么他接着是不是要执行主函数里的语句并且输出NO追答是的追问for语句中如果满足条件i*i<=n后面是到if语句还是先+i再进入if语句追答是先进循环,结束后i++
全部回答
- 1楼网友:英雄的欲望
- 2021-11-13 14:43
bool is_prime(int n)
{
if(n<2) //质数从2开始
return false;
for (int i=2;i*i<=n;i++) //判断1个数n是否为质数,并不需要将小于n的每个整数除一次,只要将小于根号n的除一次就行了,因为若有大于根号n的i,n/i必然小于根号n,前面已做过判定了。
{if(n % i == 0) // 如果存在大于2的整数能被整除,说明不是整数
return false;
}
return true; //不存在则是质数
}
int main()
{
int n;
cin>>n;
if (is_prime(n)) //is_prime(n)返回值是1,即true的话,说明是质数,输出yes
{
cout<<"yes"< }
else
{
cout<<"no"< }
{
if(n<2) //质数从2开始
return false;
for (int i=2;i*i<=n;i++) //判断1个数n是否为质数,并不需要将小于n的每个整数除一次,只要将小于根号n的除一次就行了,因为若有大于根号n的i,n/i必然小于根号n,前面已做过判定了。
{if(n % i == 0) // 如果存在大于2的整数能被整除,说明不是整数
return false;
}
return true; //不存在则是质数
}
int main()
{
int n;
cin>>n;
if (is_prime(n)) //is_prime(n)返回值是1,即true的话,说明是质数,输出yes
{
cout<<"yes"<
else
{
cout<<"no"<
- 2楼网友:独行浪子会拥风
- 2021-11-13 14:08
is_prime(int n)这个函数就是逐一测试i可不可以被n整除,还有多少需要解释的呢?
素数的定义就是自能被自己或1整除。
for (int i=2;i*i<=n;i++)
{
if(n % i == 0)
return false;
}
上面这个循环就是看n是否可以被2整除,是否可以被3整除,是否可以被4整除,等等。如果有一个可以就return false。至于为什么是i*i<=n,这个结束条件,用一个实际的例子就可以说明了。比如测试11是不是素数,不需要循环到10。因为i*i>n的时候,一个是i,另一个数必然小于i了,也就是已经测试过了。追问如果输入N=2那么I*I>n下一步是执行IF的语句还是return true的语句追答执行return true语句。for循环中条件满足才进入,即使是第一次也是这样。因此不会进入for循环中执行if追问那么接下去就执行主函数里的IF语句输出YES对吗?还有什么代码可以判断一个数是否为素数尽量短点的追答是的,会输出YES。上面代码已经很短了。就一个循环,一个判断。
素数的定义就是自能被自己或1整除。
for (int i=2;i*i<=n;i++)
{
if(n % i == 0)
return false;
}
上面这个循环就是看n是否可以被2整除,是否可以被3整除,是否可以被4整除,等等。如果有一个可以就return false。至于为什么是i*i<=n,这个结束条件,用一个实际的例子就可以说明了。比如测试11是不是素数,不需要循环到10。因为i*i>n的时候,一个是i,另一个数必然小于i了,也就是已经测试过了。追问如果输入N=2那么I*I>n下一步是执行IF的语句还是return true的语句追答执行return true语句。for循环中条件满足才进入,即使是第一次也是这样。因此不会进入for循环中执行if追问那么接下去就执行主函数里的IF语句输出YES对吗?还有什么代码可以判断一个数是否为素数尽量短点的追答是的,会输出YES。上面代码已经很短了。就一个循环,一个判断。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯