外层循环 for(i=1i<=20i++){……} 表示找 1~ 20 以内的质数(注意:这里没有把 1 排除掉)。
内层循模铅坏 for(j=2j<=i/2j++){……} 做的事情就是检查是否是质数:if(i%j == 0) 判断当前的 i 能否被当前的 j 整除,因为理论上质数是不能被这个 j 整除的,如果能整除或者循环自然结束就跳出内部循环,到 if(j>i/2) 这条,在这里可以判断是什么原因跳出的内层循环,如果是因为整除跳出的,说明这个 i 不是质数,就不做处理;如果是循环自然结束,那么说明这个 i 是质数,把它打印出来。
然后看一下 j 从 2 到 i/2 的原因,质数的定义本来是“不能被任何除了1 和它本身以外的自然迅早数整除的自然数”,不过所有的自然数都不能被大于它的自然数整除,所以不用考虑了,1 和它本身也不用考虑了,而且如果 i 能被 j 整除,那么 i 一定能被 i/j 整除,商和除数可以互换。那么最多只要考虑一半的情况,所以 j 算到 i/2。实际上可以算到 i 的平方根,但是算平方根比较麻烦,还不如旦昌好就算到 i/2。
boolean[]b=new
boolean[1000]//把1也算了进去
for(boolean
h:b){h=true}
for(int
i=2i<1000i=i+1){
if(int
i1=1i1<=1000i1=i1+1){
if(i1%i==0&&i1/i>1){/镇巧/除去1
如
13/13=0
但
13/13=1
不会竖困出御纤键现
13/1
因为i从2算起
b[i1-1]=false
}
}
}
我没有DrawingPanel,我给你找出稿亩伏来质数,你自己加进去函数吧。我把质数都放到一个list里面。public static List<Integer>getPrime(){
List<Integer>键携 list=new ArrayList<Integer>()
System.out.println("please input a number greater than 10")
Integer in=Integer.valueOf(new Scanner(System.in).nextLine())
for(int i=2i<=ini++){
int j
for(j=2j<耐孝=ij++){
if(i%j==0){
break
}
}
if(i==j){
list.add(i)
System.out.println(i+"是质数")
}
}
return list
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)