黑马程序员技术交流社区
标题:
求素数问题
[打印本页]
作者:
范鹏飞
时间:
2013-3-24 07:46
标题:
求素数问题
本帖最后由 范鹏飞 于 2013-3-26 08:04 编辑
class Test31
{
public static void main(String[] args)
{
int a = 200;
int sum = suShu(a);
System.out.println(sum);
}
public static int suShu(int num)
{
int sum=0;
for(int i=100; i<num; i++)
{
for(int j=2; j<i; j++)
{
if(i%j!=0 && i!=j)
{
sum++;
System.out.print(i+", ");
}
}
}
return sum;
}
}
复制代码
求100到200之间的素数,这行代码求不出来,想知道是哪块儿出来
作者:
魏福伟
时间:
2013-3-24 08:09
for(int j=2; j<i; j++)
{
if(i%j!=0 && i!=j)
{
sum++;//只要2~i-1之间有被j整除的,sum都会执行
System.out.print(i+", ");
}
}
改后的代码
for(int j=2; j<i; j++)
{
if(i%j!=0 && i!=j)
{
sum++;
System.out.print(i+", ");
}
}
复制代码
作者:
魏福伟
时间:
2013-3-24 08:11
上一个发错拉
package com.itheima.test1;
class Test31
{
public static void main(String[] args)
{
int a = 200;
int sum = suShu(a);
System.out.println();
System.out.println(sum);
}
public static int suShu(int num)
{
int sum = 0;
for (int i = 100; i < num; i++)
{
boolean flag = false;//设置标志位,当i是素数时flag为false
for (int j = 2; j < i/2; j++)
{
if (i % j == 0)
{
flag = true;//只要存在能被i整除的就把标志位设为true;
// sum++;
// System.out.print(i + ", ");
}
}
if(!flag)
{
sum ++;
System.out.print(i + " ");
}
}
return sum;
}
}
复制代码
作者:
胡志超
时间:
2013-3-24 08:14
本帖最后由 胡志超 于 2013-3-24 08:19 编辑
//改后的代码
class Test31
{
public static void main(String[] args)
{
int a = 200;
int sum = suShu(a);
System.out.println(sum);
}
public static int suShu(int num){
int sum=0;
for(int i=100; i<num; i++){
for(int j=2; j<i; j++){
//2也是素数,可以在这之前判断一下
if(i==2){
sum++;
System.out.print(i+", ");
}
if(i/j!=0){
sum++;
System.out.print(i+", ");
}
break;//一出现不合格的数就应该跳出当前循环,你之前就是少了这个break才出不来
}
}
return sum;
}
}
作者:
夏凡
时间:
2013-3-24 08:37
本帖最后由 夏凡 于 2013-3-24 08:41 编辑
你的代码存在的问题如下
class Test31
{
public static void main(String[] args)
{
int a = 200;
int sum = suShu(a);
System.out.println(sum);
}
public static int suShu(int num)
{
int sum=0;
for(int i=100; i<num; i++)
{
for(int j=2; j<i; j++) //内层for循环出问题了
{
if(i%j!=0 && i!=j) //此条件会使每一个整数都输出,此处应该设标志变量如flag=0,满足条件则flag=1,原执行语句删去
{
sum++;
System.out.print(i+", ");
} //if语句之后加一句 else flag=0;
} //在内层for循环外判断是否输出该整数,如果flag=1就输出这个数,否则继续外循环
}
return sum;
}
}
复制代码
作者:
995964879
时间:
2013-3-24 09:49
class Test31
{
public static void main(String[] args)
{
int a = 200;
int sum = suShu(a);
System.out.println(sum);
// 上面语句最好加点标记,如:System.out.println("\n100~200之间的素数有sum = " + sum) ;
}
public static int suShu(int num)
{
int sum=0;
for(int i=100; i<num; i++)
{
for(int j=2; j<i; j++)
{
if(i%j!=0 && i!=j)
{
sum++;
System.out.print(i+", ");
}
break ; // 跳出此循环
}
}
return sum;
}
}
作者:
陆旭东
时间:
2013-3-24 14:53
版主如果是想既要打印出素数,又要在最后打印出总数,以下就是我改的代码
class Text31
{
public static void main(String[] args)
{
int a = 200;
int sum = suShu(a);
System.out.println(sum);
}
public static int suShu(int num)
{
int sum=0;
int j;
for(int i=100; i<num; i++)
{
for(j=2; j<i; j++)
{
/*
if(i%j!=0 && i!=j) //素数是指除了1和本身,其他处以1和本身之间的数都不能整除,所以只要其中有一个能整除就不是素数
{
sum++;
System.out.print(i+", ");
}
*/
if(i%j==0) //此处就是判断是否能整除
{
break;
}
}
if(j>=i) //如果所有的都不能整除就是素数了
{
System.out.print(i+", ");
sum++;
}
}
return sum;
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2