问题:输入一个非零正整数,判断其是否是素数,是输出yes,不是输出no。
问题分析:
判断一个数是否是素数的方法是看其是否有1和自身之外的因子,只要有一个就说明不是素数。因此问题转化为判断2——n-1是否是n的因子,这就涉及到循环语句及判断语句,另外当发现有因子时还需要提前结束循环。而判断一个数是否是另外一个数的因子的方法是n%i是否等于0。
代码如下:
#coding:cp936
flag=0
n=eval(input("请输入待判断的整数:"))
for i in range(2,n):#从2开始到n-1结束, 每次+1
if(n%i==0):
flag=1
break #或者i=n
if(flag==0):
print("yes")
else:
print("no")
这里要解释一下flag变量,在程序设计中把这种变量称为标记变量,标记某事的两种及以上的状态。在这里flag=0,表示n是素数;flag=1,表示n不是素数。对于初学者来说,一般很难想到使用标记变量,如果你想到了,那么说明你是非常非常非常有天份的哦。
此外,提前结束循环的方法需要留意,break是专用命令,其实没有break提前讲循环变量值超限也可以。
此题,对于初学者来说属于稍有难度的题,也是必会题,要点是提前结束循环以及标记变量的思想和用法,这两个内容对后续学习非常重要。
留个思考:循环终止值可不可以再小一些。
下图是c++的代码供大家比较:
ps:刚刚用了一个多小时写了一篇更详尽的文章,可在dev-c++copy代码到这里时居然ctrl+v引发了无响应,结果悲催了。再写一遍的心情没有了,只好写了这篇简略的。最近杂事多,状态不好,所以更新慢!