您的位置:首页 > 编程语言

2017年校招全国统一模拟笔试(第一场)编程题集合——超级素数幂

2017-03-20 16:26 411 查看
题目要求:

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

贴上代码(此代码非本人所写):

package niuKe1;

import java.util.Scanner;

public class SuperPrimeNumber {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//int最大范围为2^32.远远小于10^18.故用long.long的范围为2^64
long num = sc.nextLong();
double p;
boolean flag = false;
for (long q = 2; q * q <= num; q ++) {
//将num的q次开平方后的值赋给p
p = Math.pow((double) num, 1d/q);
//(long)p == p 判断p经过 Math.pow((double) num, 1d/q)后是否为整数
if ((long)p == p && isPrimeNumber((long) p)) {
System.out.println((long) p + " " + q);
flag = true;
break;
}
}
if (!flag) {
System.out.println("No");
}
}

/**
* 判断是否为素数
* @param n 输入long值
* @return true素数 false 不是素数
*/
public static boolean isPrimeNumber(long n) {
if (n <= 1) return false;
for (int i = 2; i * i <= n; i ++) {
if (n % i == 0) return false;
}
return true;
}

}


总结:

p = Math.pow((double) num, 1d/q);此函数求出num的 1d/q次方,即q此根号下num的值。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: