阿康康康 发表于 2020-12-24 19:29:51

求助一道编写方法判断超级素数的题目!

题目:
超级素数的另一种概念:如果2位数素数去掉高位数字后是1位数素数,则该数是超级素数;m(m>1)位超级素数去掉最高位后是m-1位超级素数。
编写类a.A,添加方法static boolean isSuperPrime(int n),如果n是超级素数则返回true,否则返回false。

{:10_269:}感谢!

2269099035 发表于 2020-12-25 14:48:23

import java.lang.Math;
import java.util.Scanner;

public class A {
    public static void main(String[] args) {
      int num;
      Scanner sc = new Scanner(System.in);
      System.out.println("请输入一个数字:");
      num = sc.nextInt();
      sc.close();
      if (isSuperPrime(num)){
            System.out.println("是超级素数");
      }
      else{
            System.out.println("不是超级素数");
      }
    }
    static boolean isSuperPrime(int n){
      int i=1,flag=0;
      while (true){
            if (n%i == n){
                break;
            }
            i*=10;
            flag++;
      }
      if(isPrime((int)(n%(Math.pow(10, (flag - 1)))))){
            return true;
      }
      else{
            return false;
      }
    }
    static boolean isPrime(int n){
      if (n < 1){
            System.out.println("error");
      }
      if (n == 1){
            return true;
      }
      if (n%2 == 0){
            return false;
      }
      for (int i = 2; i < n/2;i++){
            if (i%2==0){
                continue;
            }
            if (n%i == 0){
                return false;
            }
      }
      return true;
    }
}

伍陆柒5678 发表于 2021-1-5 21:21:09

本帖最后由 伍陆柒5678 于 2021-1-5 21:41 编辑

step1 : 先判断这个n是不是素数
    Case1 : 不是直接返回false
    Case2 : 是素数,再判断减一位是不是素数(用 / 10得出的结果判断,这是减最低位,如果减最高位,先去求有多少位,然后取10余数相加这种方式)
step2 : 写一个helper function判断是不是素数
用一个for loop, i 从 2 一直到 根号 n(不需要全部判断,节约时间), 每次加一,在每次循环里,判断 % i 是不是得 0, 得0的不是素数,不得0的返回true




伍陆柒5678 发表于 2021-1-7 10:54:10

本帖最后由 伍陆柒5678 于 2021-1-7 11:01 编辑

public class A{
        public static boolean isSuperPrime (int n) {
                if (n <= 10) {
                        return false;
                }
                if (!isPrime(n)) {
                      return false;
                }
                int mul = 0;
                int newInput = 0;
                while (n / 10 != 0) {
                       multiple = mul * 10;
                       mul++;
                       if (multiple == 0) {
                              newInput += n % 10;
                     } else {
                            newInput += (n % 10) * mutiple;
                     }       
                      n = n / 10;
                }
                if (!isPrime(newInput)) {
                   return false;
                }
                return true;
          }
        private static boolean isPrime (int n) {
                if (n < 2) {
                        return false;
              }
                if (n == 2) {
                        return true;
                }
              for (int i = 2; i * i <= n; i++) {
                             if (n % i == 0) {
                                return false;
                               }
              }
                       return true;
        }
}

sweet@ 发表于 2021-1-15 12:51:13

class Prime{
    public static boolean isSuperPrime(int n){
      String str=String.valueOf(n);
      String str1=str.substring(1);
      int num=Integer.parseInt(str1);
      System.out.println("去掉最高位:"+num);
      return isPrime(num);

    }
    public static boolean isPrime(int n){
      if(n<0||n==1||n==0){
            return false;
      }
      for(int i=2;i<=Math.sqrt(n);i++){
            if(n%i==0){
                return false;
            }
      }
      return true;
    }
}
页: [1]
查看完整版本: 求助一道编写方法判断超级素数的题目!