牛客网[编程题] 超级素数幂(Java实现)

来源:互联网 发布:手机屏幕恶搞软件 编辑:程序博客网 时间:2024/05/17 09:18

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

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


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

输入例子:
27

输出例子:
3 3

package power.prime.superrrrr;import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);// 输入n的范围超过了int,只能用long类型// int是32位,long是64位long n = sc.nextLong();solve(n);sc.close();}/* * 注意:solve方法中q要用long数据类型 * 频繁的数据类型转换(long to int or int to long)会耗费大量时间 */private static void solve(Long n) {double p;for (long q = 2; q * q <= n; q ++) {//这里p和q的数据类型一定要一致,否则运行时间会超时p = Math.pow(n, 1d / q);if (p ==Math.floor(p) && isPrime( (int)p)) {System.out.println((int) p + " " + q);return;}}System.out.println("No");}// 判断是否素数private static boolean isPrime(long p) {if (p <= 1)return false;for (int i = 2; i * i <= p; i++) {if (p % i == 0)return false;}return true;}}











0 0
原创粉丝点击