1111的收获

星期五下午的时候,老湿出了一道题目,是让我们通过for循环打印出100以内的所有质数(素数),所谓质数,就是除了1或者其本身能整除以外,都不能被整除的妖娆数字。

一开始感觉这道问题很简单,但是仔细做起来的话就不一样了,一开始感觉套两个循环,一个是2~100的被除数,然后再套一个1~100的除数,能满足条件的数字就可以了,但是想把这个数字本身提取出来是非常麻烦的事情,当时回去考虑了很长时间也没有做出来。无奈之下就去找了一点“素材”,百度了一下,网上有很多方法,不过我找到一种没有用布尔的方法,虽然得到了结果,但是还是没有理解,或者说理解了一半,所以带着这个疑问我又去百度知道提问了一下,经网友的指点,最后终于习得了秘籍……哈哈,代码如下:

int j;
for (int i = 2; i < 100; i++)
{
for (j = 2; j <=Math.Sqrt(i); j++)
{
if (i % j == 0)
break;
}
if (j >Math.Sqrt(i))
{
Console.Write("{0}\t",i);
}
}

虽然只有这么几行文字,但是理解起来我感觉还是挺不容易的,一点点解释吧。

首先定义一个整型j,这个很简单,不用解释,然后第一个for循环里面的i就是被除数,要在2~100之间找到素数。

难点在第二个循环里面j的循环条件。j是2~100之间的整数,中间Math.Sqrt方法表示提取其平方根,就是说j不能大于i的平方根,这是为什么呢?想一下,一个数字所有能整除它的数字绝对不会大过这个数字的平方根,这样就排除了i这个数字与其本身相除的时候的局面,直接判断一个条件就可以得到我们想要的数字。反之,如果其中有任何一个数字能够整除i的话,就立即终止循环,进入下一个数字。

下面这个判断语句我当时花了好长时间才理解过来,其实就是在第一个if循环完了以后,没有一个数字能够整除i的话,就输出这个数字,也就是我们要找的质数。

这段语句我理解的还不算太透彻,我还会花时间去研究的。

转载于:https://www.cnblogs.com/Dawn-z/archive/2012/11/11/2765161.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值