黑马程序员技术交流社区
标题:
这个程序怎么改进?
[打印本页]
作者:
HM张博文
时间:
2013-5-28 14:31
标题:
这个程序怎么改进?
本帖最后由 HM张博文 于 2013-5-31 09:16 编辑
class Prime2
{
public static void main(String[] args)
{
int i,j,count=0;
for( i=2;i<100;i++)
{
for( j=2;j<Math.sqrt(i);j++)
{
if(i%j==0)
break;
}
if((i%j)!=0)
{
System.out.println(i);
count++;
}
}
System.out.println("素数个数为"+count);
}
复制代码
上面是一个求素数的程序。但是按上面的程序,2就不会被判定为素数,输出是从3开始的。我知道可以定义一个isPrime的函数,但我这里希望不定义函数,直接在这段程序里面改,这段程序能改好么?[qq]9876997[/qq]
作者:
Jacky_Chen1990
时间:
2013-5-28 14:54
消灭0回复作战。
作者:
赵崇友
时间:
2013-5-28 19:52
本帖最后由 赵崇友 于 2013-5-28 19:55 编辑
给你个我写的求素数的代码:希望对你有所帮助。我这是从101-200的,大同小异。哪地方不懂,可以问我。
/*
* 题目:判断101-200之间有多少个素数,并输出所有素数。 程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,
* 则表明 此数不是素数,反之是素数。
*/
@Test
public void exercice2() {
StringBuilder sb = new StringBuilder();
int count = 0;
for (int x = 101; x <= 200; x++) {
boolean flag = false;
for (int y = 2; y <= Math.sqrt(x); y++) {
if (x % y != 0) {
continue;
} else {
flag = true;
break;
}
}
if (!flag) {
count++;
sb.append(x + ",");
}
}
sb.deleteCharAt(sb.length() - 1);
System.out.println("101-200之间的素数有" + count + "个!分别为:");
for (int i = 0; i < sb.length(); i++) {
System.out.print(sb.charAt(i));
}
}
复制代码
作者:
韩明海
时间:
2013-5-28 21:32
if((i%j)!=0)你本意是将
if(i%j==0)
break; 的情况过滤掉,但是2特殊值,要特殊处理。
if(Math.sqrt(i)<2||(i%j)!=0)
作者:
袁梦希
时间:
2013-5-30 10:47
楼主你好,如果帖子没问题了,那么请把帖子的类型改为“已解决”。如果不会改,请看我的个性签名
作者:
HM张博文
时间:
2013-5-31 09:17
袁梦希 发表于 2013-5-30 10:47
楼主你好,如果帖子没问题了,那么请把帖子的类型改为“已解决”。如果不会改,请看我的个性签名 ...
袁版主非常给力啊
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2