码迷,mamicode.com
首页 > Windows程序 > 详细

对于C#中遇到质数问题的一点思考

时间:2018-06-10 19:31:40      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:font   入门级   mes   重复   write   false   lin   text   int   

对于入门级程序猿(工程狮)来说,无论是自己摸索还是在老师引导下,第一次遇到跟筛选质数相关的一系列问题,总会有点头大。萨摩本人于此深有体会,无论是作为高中数学题的编程应用还是大学公共计算机课程初涉C语言亦或是现在正在学习的C#,也无论之前的一些简单问题处理得多么行云流水,质数都要来个下马威,让人卡机,认识到程序世界残酷的真相(不排除个人智力因素...)~

对于判断质数,老师传授了一种思路,即定义一个bool变量,初始化true,然后对数据进行循环判断。因为质数只能被1和它本身整除,所以在循环体中,定义一个初始值为2,不断自增到数据本身减1的变量,然后让数据重复求余该变量。一旦求余为0即代表数据可以整除除1和自身外的某一个数,则该数就不是质数,bool变量可赋值为true,终止循环。反之,进行下一循环,若循环到自身减1都未找到可以整除的除数,则代表该数就是质数,终止循环。最后对bool变量进行判断,即可的到结论。

代码举例:

int num=int.Parse(Console.ReadLine());

bool isFind=true;

for(int i=2;i<=num-1;i++)

{

if(num%i==0)

{

isFind=false;

break;

}

}

if(isFind)

{

Console.WriteLine(num+"是质数");

}

else

{

Console.WriteLine(num+"不是质数");

}

Console.ReadLine();

通过这样的代码实现,能够基本实现对任何一个用户输入的正整数进行是否是质数的判断。但是,作为在数学上就必须注意的一点——1是否是质数,这段代码并不能进行正确的判断。众所周知(说是这样说,萨摩反正是百度了),1并不是质数,虽然它满足其只能被1和自身整除的条件,但因为1和自身都是1,其因数事实上只有1个。在数学史上,曾经将1视为质数,但后来明确定义了,(正)因数个数为2的正整数才是质数,此时1因为只有1个因数,就脱离了质数的队伍,当然也进不了合数的行列。因此按照这个定义的概念,判断质数的代码有了新的思路,即让某数据从1开始取余直到自身,因为任何一个数都可以被1和自身整除,所以除1以外,所有数的因数至少为2个,而一旦某数因数多于2,则可以断定其为合数。故可定义一个计数变量用于统计某数的因数个数,每有1个因数该计数变量自增1,在循环结束后对于计数变量进行判断,若其为2,则该数为质数,反之无论大于2还是小于2均不是质数。

代码举例:

int num=int.Parse(Console.ReadLine());

int times=0;

for(int i=1;i<=num;i++)

{

if(num%i==0)

{

times++;

continue;

}

}

if(times==2)

{

Console.WriteLine(num+"是质数");

}

else

{

Console.WriteLine(num+"不是质数");

}

Console.ReadLine();

以上,就是思考后的代码实现,可以对1进行正确的判断,当然,既然1不是质数也不是合数的定义已经深入人心,完全可以在一开始就对用户输入的数字进行判断,如果是1,则可直接输出结果,这里也只是针对这个问题稍加赘述。

最后,需要说明的是,这只是入门级的小问题,映射出的是对于问题进行多层次思考的必要性,相信随着不断学习,还有更多更好更全面更简单的编程思想可以参考,作为初学者,萨摩表示很期待!

对于C#中遇到质数问题的一点思考

标签:font   入门级   mes   重复   write   false   lin   text   int   

原文地址:https://www.cnblogs.com/PoetSAW/p/9164016.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!