用c++求100以内的素数

麻烦解释一下以下代码是如何实现求100以内的素数
#include <iostream.h>
#include <math.h>
int main()
{
int i,j,m,sum=0;
for(i=2;i<=100;i++)
{
m=int(sqrt(i));
for(j=2;j<=m;j++)
{
if(i%j==0)break;
}
if(j>m)
{
cout<<i<<"\t";
sum++;
if(sum%5==0)cout<<endl;//输出5个素数就换行一次
}
}
return 0;

for(i=2;i<=100;i++) //因为题目是求100以内的质数,所以检查2至100之间的数据,循环从2到100
{
//以下,是针对每个i进行检查,如果是质数,则输出,否则继续循环,检查下一个数
m=int(sqrt(i)); //对i进行开方,取得i的算术平方根 m
for(j=2;j<=m;j++) //检查2到m中是否有i的因数
{
if(i%j==0)break; //如果检查到有因数则结束j的循环
}
if(j>m) //如果j的循环检查中,没有找到i的因数,则此时j=m+1>m,说明i是质数
{
cout<<i<<"\t";
sum++;
if(sum%5==0)cout<<endl;//输出5个素数就换行一次
}

关于为什么只需要验证到m就可以确定一个数是不是质数,原理如下:
x = a * b ;
a <= 根号x b >=根号x
这个数学原理,想一想就明白了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-08-23
#include <iostream.h>
#include <math.h>
int main()
{
int i,j,m,sum=0;
for(i=2;i<=100;i++)
{
m=int(sqrt(i)); //为啥m是i的平方根,其实除到平方根没有整除的,后面就不用除了~

for(j=2;j<=m;j++)//素数的定义知道吧,这个for循环就是判断除了1和自身以外有没有能整除的数字
{
if(i%j==0)break;
}
if(j>m)
{
cout<<i<<"\t";
sum++;
if(sum%5==0)cout<<endl;//输出5个素数就换行一次
}
}
return 0;本回答被网友采纳
第2个回答  2017-08-21
#include "stdafx.h"
#include"iostream"
using namespace std;
int _tmain(int argc, _TCHAR* argv[]){
for(int i=2;i<=100;i++){
for(int j=2;j<=i;j++){
if((i%j==0)&&(i!=2)){
break;
}else if(j>i/2){
cout<<i<<endl;
break;
}
}
}
return 0;
}
第3个回答  2013-08-02
哪里看不懂。。 如果是开根号那里的话是数学问题。。追问

整个都不太懂,尤其是数学方面

追答

for(i=2;i= 2 且 m 说明 j 超过边界了,i 没有因子,是素数。

追问

求二次根是不是等于开方?

追答

相似回答