黑马程序员技术交流社区
标题:
求素数的问题
[打印本页]
作者:
linliner
时间:
2015-3-23 21:21
标题:
求素数的问题
/*需求:求出100以内的素。
思路: 1,首先确定2是素数;
2,从3开始到100的每个数n分别对2到前一个素数取模,若为0,都不为0,就是素数;
3,把这些数存到数组中; 4,遍历数组,每5个一行进行打印。
*/
存在的问题:
1,每个奇数都会被打印
2,许多数不止被打印一次
怎么样才能每个数只打印一次
怎么样才能使非素数不被打印--内循环循环一遍才确定是否打印
*/
for ( int x =3 ; x <=100 ; x++ )
{
for ( int y = 2 ; y < x ; y++ )
{
if (x%y==0)
break;
else
System.out.print(x+",");
}
}
问题怎么解决呢?
还是思路就有问题了?
作者:
Grady
时间:
2015-3-23 21:48
在else中加个break
作者:
殷俊
时间:
2015-3-23 21:53
取模的思路对,但是break不对,你应该用一个计数器,加下x%y==0的次数,然后再判断计数器为几,如果计数器为0,则为素数,输出他,如果大于 0,则不是素数
作者:
kkqisheng
时间:
2015-3-23 23:31
举个例子你就知道为什么错了:比如现在要对10这个数进行判断,首先10%2==0,已经可以得出10不是素数。可是程序此时跳出if,还会继续计算10%3!=0,于是打印10。你要知道,一个数即使不是素数,但对2到(自身-1)的取模过程中,总会有N个结果不是0的,这时就会打印N次这个数。正如楼上所说,必须加个计数器,设定只有N为0时,才会打印这个数。
作者:
linliner
时间:
2015-3-26 20:52
已经做出来了,只是是定义了一个函数,在if条件里调用函数做的
class test318_003
{
public static void main(String[] args)
{
for (int x = 2 ;x < 101 ; x++ )
{
if (x==2)
{
System.out.print(2+",");
}
else
{
if (isPrime(x)==true)
{
System.out.print(x+",");
}
}
}
}
public static boolean isPrime( int x )
{
for ( int i = 2 ; i < x ; i++ )
if (x % i == 0)
return false ;
return true ;
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2