最大数量素数小于给定数量的java

时间:2015-09-29 14:13:52

标签: java

我的问题很简单,但我无法弄清楚如何解决我的想法。 我必须找到最小的数字素数少于一个给定的数字,如果没有打印消息。

import java.util.Scanner;

public class Ex8 {
    public static void main(String[] args){
        int n;
        System.out.println("Give the number: ");
        Scanner in = new Scanner(System.in);
        n=in.nextInt();
        while(prim(n) == false){
            n--;
        }                                     
        System.out.println(n);                    

    }


    public static boolean prim(int m){
        int n=m;
        for(int i=2;i<n;i++){
            if(n%i == 0){
                return false;
            }

        }   
        return true;
    }
}

代码有效,如果数字为10则打印7但我想进行2次新修改而我找不到解决方案。例如,如果给定的数字为1,我的程序应如何修改以打印消息?我试着写一个if-else,但如果我用if修改了while,这对我没用。 第二件事,如何使得如果给定的数字是一个素数,代码仍然找到比给定数字少的数字。如果我给出数字7,则输出也是7。 谢谢。

2 个答案:

答案 0 :(得分:1)

  1. 您不会修改while - 只需在其周围写一个if
  2. 在开始测试质数之前,只需减少n

    if (n < 2) {
        System.out.println("Number must be greater than 1");
    } else {
        n--;
        while (!prim(n)) {
            n--;
        }                                     
        System.out.println(n);                    
    }
    
  3. 或者:

    if (n < 2) {
        System.out.println("Number must be greater than 1");
    } else {
        while (!prim(--n));                                     
        System.out.println(n);                    
    }
    

答案 1 :(得分:0)

你可以在你的while循环之前检查n == 1并在else子句中执行循环。

关于你的第二个问题,你现在通过检查输入的数字n是否为素数来开始你的while循环。你应该用n-1开始检查。

int n;
System.out.println("Give the number: ");
Scanner in = new Scanner(System.in);
n=in.nextInt();
if (n == 1) {
  System.out.println("Your message here");
} else {
    n -= 1;
    while(prim(n) == false){
        n--;
    }                                         
System.out.println(n);                    

}