当前位置: 首页 > 知识库问答 >
问题:

小于给定数的最大素数

汤昊
2023-03-14

我的问题很简单,但我不知道如何解决我想要的。我必须找到小于给定数字的最大数素数,如果不存在则打印消息。

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个答案

蓬思博
2023-03-14

只需在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);                    

}
松俊美
2023-03-14

>

  • 当时,你不需要修改——只要在它周围写一个(如果
  • 在开始测试素数之前,只需减小n

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

    或者替代地:

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

  •  类似资料:
    • 这个问题有多项式解吗?如果有,你能呈现吗?

    • 所以,我有一个所有正自然数的数组。给我一个阈值。我必须找出总和小于给定阈值的数字(连续的)的最大计数。 输入数组的最大大小可以为 10^5。 基本上,我想到了一种算法,它计算原始数组的子集中元素的数量,这些元素的总和将小于给定的阈值。但是,这将导致O(N^2).的复杂性有人能建议一个更好的算法吗?我不是在寻找一个代码,只有一个算法/伪代码将做得很好。谢谢!

    • 我想找到一组素数的最小集合,它可以和一个给定的值,例如9=7+2(而不是3+3+3)。 我已经使用eratosthens筛生成了一个数组素数 我正在按降序遍历数组,以获得数组中小于或等于给定数的最大素数。如果数字是奇数,这很有效。但对于偶数(例如122=113+7+2,但122=109+13)则失败。

    • 打印出小于给定数N的素数。对于奖励积分,您的解决方案应该在时间或更好的时间内运行。你可以假设N总是一个正整数。 输入样本: 程序应该接受文件名的路径作为其第一个参数。该文件中的每一行都是一个测试用例。每个测试用例将包含一个整数

    • 给定一个2D数组和一个数字。 问题:我们有一个矩阵,矩阵的每个单元格表示遍历该单元格的成本。我们从左上角开始,我们必须到达最后一个单元格(右下角)。我必须编写一个函数,返回到达而不超过的最大代价路径的代价。 如果找不到最大和小于或等于的路径,则返回,矩阵的值不能为负 解决方案:我尝试了很多代码,但没有一个返回我期望的结果。 我的第一个解决方案是在一个简单的数组中转换2D数组,并应用背包算法,但它不