2013-09-27 159 views
0

我有一个打印质数列表的程序有问题,但由于模数被忽略,程序无法正常工作。有人可以在这里找到错误吗?由java编译器忽略的mod

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 
+0

它拥有铸造翻一番,而我得到的1.5 MOD应该是1.5到其返回1.5 –

+0

'1.5%10 == 1.5' ...你还期望什么? – assylias

+0

它应该是5对吧? –

回答

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"); 
    } 
} 
0

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

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

所以,你的下一个迭代发生在那里actual=3probando=2,打印您看到的值。

+0

这就是正确的2它是一个素数,问题是,当第二个循环工作的mod不叫或它不工作我不知道为什么 –

+0

@BaxterLopez模组的调用与您所说的完全相同。你认为应该打印什么? –

0

它应该是一个数是素数

int valor = actual % probando; 

由于actual/probando给人的整数除法(舍去/截断分数) actual % probando给出了这样的除法的余数:

12/7 = 1 
12 % 7 = 5 


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

如果值是0,probandoactual的除数。你的意思是。