超级素数幂
Posted ~寸寸君的园子~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了超级素数幂相关的知识,希望对你有一定的参考价值。
链接: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; } }
-
以上是关于超级素数幂的主要内容,如果未能解决你的问题,请参考以下文章