C++语言问题,关于编程一个显示从1到100的质数。

#include<iostream>usingnamespacestd;intmain(){inti,j,k,n;for(i=2;i<=100;i++){k=1;n=sq... #include<iostream>
using namespace std;
int main(){
int i, j, k, n;
for (i = 2; i <= 100; i++)
{
k = 1;
n = sqrt(i);
for (j = 2; j <= n; j++)
if (i%j == 0)
{
k = 0;
break;
}
if (k == 1)
cout << i << "是质数" << endl;
}
return 0;
}

为什么要有n=sqrt(i);语句,而不是在for 语句中的j<=n;改为j<=i;
请高手解答!
展开
 我来答
物理公司的
推荐于2017-10-14 · TA获得超过5697个赞
知道大有可为答主
回答量:6105
采纳率:86%
帮助的人:1393万
展开全部
假如某个数n不是素数,则一定可以分解成x*y形式。
由此可以推论,n不是素数,则一定可以被某个小于n的数整除。
而对n来说,最小公因数最大只可能为n的平方根,因为假如存在一个大于n平方根的公因数x,则一定存在另一个公因数y=n/x, y<x。从上面的推理可以得出结论,如果n不能被所有小于等于它的平方根的整数整除,则n为素数
像你那样也对,可是n后面的循环都浪费掉了,这样提高了效率
更多追问追答
追问
可是按照我那想法去编译运行程序,却不显示结果,为什么?
追答
for (j = 2; j <= n; j++)//这里=号要去掉啊,不然一定会被自身给break出去
183525594
2014-12-06 · TA获得超过2922个赞
知道大有可为答主
回答量:3664
采纳率:58%
帮助的人:2073万
展开全部
加一个sqrt执行次数很明显减少,不必要的循环次数去掉

根据数学知识,这样做是没问题的~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式