为什么我这个java程序运行出来,结果全是空格。

题目是:打印出10000以内的所有质数。我的num要是5000的话就能求出来结果!!!

public static void main(String[] args) {
int num = 1;
int i;
System.out.print(num + " ");
for (num = 2; num <= 10000; num++) {
for (i = 2; i <= num; i++) {
if (num % i != 0) {
continue;
} else if (num % i == 0 && num != i) {
break;
} else if (num % i == 0 && num == i) {
System.out.print(num + " ");
continue;
}
}
}
}

第1个回答  2013-04-22

我这里结果正确,但是最好把1去掉。

第2个回答  2013-04-22
public static void main(String[] args) {
int num = 1;
int i;
System.out.print(num + " ");
for (num = 2; num <= 10000; num++) {
boolean istrue = true; //代表是质数
for (i = 2; i <Math.sqrt(num); i++) {
if(num%i==0){
istrue =false ;
break;
}
}
if(istrue){
System.out.print(num+" ");
}
}
}

这样才是求质数!!!另外你说10000 输出的都是空格,其实这是eclipse的问题,你一行显示的字符串太长了,无法显示,你可以把打印语句改成 System.out.println(num+" ");这样就能看到了追问

System.out.println(num+" ");改成这样是可以了,但是为什么有的电脑可以运行出来,有的,就不行?
还有for (i = 2; i <Math.sqrt(num); i++)为什么要是 i <Math.sqrt(num)???

追答

eclipse能够设置 每一行显示多少个字符,也和电脑位数有关系,这个没问题,,你用控制台就可以

i <Math.sqrt(num) 这个一个数的开方的意思
例如你求100是不是质数 你只需要循环到10就够了
1*100 2*50 4*25 5*20 10*10 *将其分为左边,右边两部分
这几组数都是100的因子
求质数,是100内没有被整除的数,对吧
你看看100以内 100的因子
左边最大为10 ,右边最小为10
如果按照你的写法,你从1循环到100 , 当1的时候,其实你已经把100的情况排除了,当2的时候你已经把50的情况排除了,同理,当5的时候,你把20已经排除了,那么你为什么又要循环到20,50,甚至100那?
这个设计到一个算法问题了!

本回答被提问者和网友采纳
第3个回答  2013-04-22
。其实求素数,如100,对他求余的数,只要到50就够了,再大的话,也没意义。
相似回答
大家正在搜