0

我对打印素数列表的程序有疑问,但是由于忽略了模数,因此程序无法正常工作。有人可以在这里找到问题吗?

import java.util.Scanner;


public class Primos {

    public static void main(String[] args){
        Scanner entrada = new Scanner(System.in);
        System.out.println("Dame el numero hasta el cual sacare primos");
        int hasta = entrada.nextInt();

        for(int actual = 2 ; actual <= hasta ; actual++){
            boolean primo = true;
            for(int probando = 2 ; probando < actual ; probando ++){
                double valor = (double)actual/(double)probando;
                System.out.println("1." +valor);
                valor = valor % 10;
                System.out.println("2." +valor);
                if(valor == 0){
                    primo = false;
                    break;
                }
            }

            if(primo)
                System.out.println("El numero " + actual + " es primo");
        }
    }   
}

印刷

Dame el numero hasta el cual sacare primos
3
El numero 2 es primo
1.1.5 <before mod
2.1.5 < after mod
El numero 3 es primo
4

4 回答 4

1

正如assylias 的评论中提到的,1.5 % 10 = 1.5

替换你的陈述

valor = valor % 10; 

valor = valor - (long) valor;
于 2013-09-27T15:05:38.420 回答
0

你的逻辑是错误的。一个数字是素数,如果没有小于它的数字均匀地分成它(即数字 % 因子 == 0 表示它不是素数)

public static void main(String[] args){
    Scanner entrada = new Scanner(System.in);
    System.out.println("Dame el numero hasta el cual sacare primos");
    int hasta = entrada.nextInt();

    boolean primo = true;
    for(int factor = 2 ; primo && factor < hasta/2 ; factor++){
      primo = hasta % factor != 0;
    }
    if(primo)
      System.out.println("El numero " + actual + " es primo");
    }
}   
于 2013-09-27T15:04:43.533 回答
0

它应该是

int valor = actual % probando;

给出actual / probando整数除法(向下舍入/截断分数), actual % probando给出这种除法的余数:

12 / 7 = 1
12 % 7 = 5


(p / q) * q + (p % q) == p

如果值为 0,probando则为 的除数actual。你的意思是。

于 2013-09-27T15:05:29.313 回答
0

在您的第一次迭代中,嵌套的 for 循环不会执行,因为actual=2它不小于probando=2.

for (int probando = 2; probando < actual; probando++) {

所以你的下一次迭代发生在 whereactual=3probando=2,打印你看到的值。

于 2013-09-27T14:55:51.713 回答