zoukankan      html  css  js  c++  java
  • 超级素数幂 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;
              }
          }
                    
  • 相关阅读:
    学会用好 Visual Studio Code
    Alpha冲刺阶段博客汇总
    第二天敏捷冲刺
    第一天敏捷冲刺
    需求分析与设计
    软工网络15团队作业2——团队计划
    团队组队&灰化肥挥发会发黑
    Tomcat安装及部署
    正则表达式
    爬取腾讯疫情数据
  • 原文地址:https://www.cnblogs.com/cuncunjun/p/6528416.html
Copyright © 2011-2022 走看看