下面是引用 翁赐维 于 2010-01-13 08:09 发表的 :
抱歉,我打错了!!
前面的程式码:
temp2=temp%i应改成temp2=temp1%j才对
这样才有办法用那个数去除以大于1小于那个数的所有整数
抱歉!!
麻烦在帮我看一下,谢谢!!
嗯,那意思就是如下了
┌────┬────┬────┬────┬────┬──
│ i │ 1 │ 2 │ 3 │ 4 │ 最大的回圈
├────┼────┼────┼────┼────┼
│temp1│ 3 │ 4 │ 5 │ 6 │ temp1=temp1+i
├────┼────┼────┼────┼────┼
│ j │ 2~3 │ 2~4 │ 2~5 │ 2~6 │ 第二层回圈 j=2~temp1
├────┼────┼────┼────┼────┼
│temp2│ 3%1 │4%2 │ 5%3 │ 6%4 │ 将temp1取余数temp2=temp1%j
├────┼────┼────┼────┼────┼
大致上你要算是否为质数的的方向是OK的,
不过错在你的判断式,
你判断式为
if(整除)
则跳出回圈,
else
印出来.
因为会造成不管对错,都会列印出来,对的会重覆出现,错的也会出现
举个例子,当i=3时,则temp1=5时,在j=2~5的回圈中
5%2=1 ==>印出来
5%3=2 ==>印出来
5%4=1 ==>印出来
5%5=0 ==>跳出回圈
因为从2 开始除,每除一次就印一次,所以会印出3个5
若i=7时,则temp1=9时,在j=2~9回圈中
9%2=1 ==>虽然不为质数,但因为第一个是用去验证,且又没有整除,所以会被印出来
9%3=0 ==>跳出回圈,第二个验证才整除,不过除以2时,就已印出9了
因此,只要是单数,都会被印出至少一个
所以是整个判断式有问题,不是红色字,
给你一个方向,你可以在回圈内用个变数去记录,是否整除,待回圈都除好时,在用此变数去判断
才不会造成重覆印和印出质数来.
以上参考看看