• 超级素数幂 java


    链接:https://www.nowcoder.com/questionTerminal/fb511c3f1ac447309368d7e5432c6c79
    来源:牛客网

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

    输入描述:

    输入一个正整数n(2 ≤ n ≤ 10^18)

    输出描述:

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

    输入例子:

    27

    输出例子:

       3 3

    分析:此题分为两部分,首先考虑n是否能转化为p^q的形式,其次判断P是否为素数。

        1.利用pow()函数进行开方,q的值最小为2最大为sqrt(n);

        2.素数是大于1的自然数中,除了1和它本身以外不再有其他因数的数。所以除了2以外的偶数都不是素数,这样可以筛选掉一部分数。

        • 判断p是否为素数,需要除以从2~sqrt(p)的数都不整除。
        • 或者从第1个素数开始添加到一个集合中,后面的只需要判断是否能整除小于自己的素数即可。
        • import java.util.Scanner;
          
          public class Main {
          
              public static void main(String[] args) {
                  Scanner sc = new Scanner(System.in);
                  long num=sc.nextLong();
                  double p=0;
                  boolean flag=false;
                  for(long q=2;q<=(long)Math.sqrt(num);q++){
                      p=Math.pow((double)num,1d/q);
                      if((long)p==p&& prime((long)p)){
                          System.out.println((long)p+" "+q);
                          flag=true;
                          break;
                      }
                  }
                  if(!flag) {
                      System.out.println("No");
                  }
              }
              public static boolean prime(long n){
                  if(n%2!=0||n==2){
                      for(long j=2;j<=(long)Math.sqrt(n);j++){
                          if(n%j==0&&n!=2) return false;
                      }
                      return true;
                  }
                  return false;
              }
          }
                    
  • 相关阅读:
    渲染你刚刚上传的图片,再进行二次上传
    详情页需要显示图片
    上传图片
    毛利率保留俩位小数
    去除input的前后的空格
    vue下载模板、导出excle
    如何从一个对象里面拿数据
    登录注册
    ajax发送请求的数据类型
    WampServer修改MySQL密码
  • 原文地址:https://www.cnblogs.com/cuncunjun/p/6528416.html
Copyright © 2020-2023  润新知