你那个写的有点乱,代码可以写成下面这个样子,这个问题的关键就是怎样让代码的时间复杂度越低,即性能越好。素数的特征就是只能被1和他自己整除。我们可以以这个为出发点,控制循环条件,你可以看看我代码,不懂的还可以问,希望能够帮助你,谢谢
public static void main(String args[]) {
System.out.println("1-100内的素数为:\n");
int number = 1;
boolean isSuShu = true;
while(number<=100) {
for (int begin=1; begin<=number ; begin++) {
if (number%begin ==0 && begin != 1 && begin != number) {
isSuShu=false;//只要这个数能被1和他本身其他的数除尽的话,他就不是素数
break;
}
}
if (isSuShu) {
System.out.println("素数:" + number);
}
number++;
isSuShu = true;//每次循环完都要重新给这个标志位赋值
}
}
因为number2迟早为1,1 %任何数都为1,所以number++永远执行
按照你的方法,我修改你的
public class data3 {
public static void main(String[] args) {
int number1 = 1;
while (number1 <= 100) {
int number3 = 0;
for(int i = 2; i < Math.sqrt(number1); i++){
if(number1 % i == 0){
number3++;
break;
}
}
if (number3 == 0) {
System.out.println(number1);
}
number1++;
}
}
}
你程序是什么意思,if (number2%number1==0)你number2<=number1 取余只有一种情况(number2==number)等于0啊,你说结果是不是所有数都输出了呢。
public class Test02 {
public static void main(String[] args){
System.out.println("1-100内的素数为:\n");
sushu();
}
static void sushu(){
int num=1;
while(num<=100)
{
int num2=0;
for (int i = 1; i <= 100; i++) {
if(num%i==0)
{
num2++;
}
}
if(num2==2)
{
System.out.println(num);
}
num++;
}
}
逻辑判断错误!
boolean[] flagother= new boolean[20000];
int p,w;
int n=2;
for(p=0;p<20000;p++){
flagother[p]=true;
}
for (int q=2;q<=Math.sqrt(p);q++){
if (flagother[q]) {
for(int j=q;q*j<20000;j++){
flagother[q*j] = false;
n = n+1;
System.out.print(q);
}
}
}