[编程题] 超级素数幂

如果一个数字能表示为pq(表示幂运算)且p为一个素数,q为大于1的正整数就称这个数叫做超级素数幂。现在给出一个正整数n,如果n是一个超级素数幂需要找出对应的p,q。
输入描述:
输入一个正整数n(2 ≤ n ≤ 10^18)

输出描述:
如果n是一个超级素数幂则输出p,q,以空格分隔,行末无空格。
如果n不是超级素数幂,则输出No

输入例子:
27

输出例子:
3 3

import java.util.Arrays;
import java.util.Scanner;
public class Pass {     
        public static boolean Sushu(long n){
            if(n%2!=0||n==2){
                for(int j=2;j<=Math.sqrt(n);j++){
                    if(n%j==0&&n!=2){
                        return false;                       
                    }                       
                }
                return true;
            }
            return false;   
        }
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Scanner sc = new Scanner(System.in);
            long n = sc.nextLong();
            boolean flag=false;
            for(long q=2;q<=(long)Math.sqrt(n);q++){
                double p=(double) Math.pow((double)n, 1d/q);
                if((long)p==p&&Sushu((long)p)){
                    System.out.println((long)p+" "+q);
                    flag=true;
                    break;
                }               
            }
            if(!flag){
                System.out.println("No");
            }       
        }
}

你可能感兴趣的:([编程题] 超级素数幂)