超级素数幂

来源:互联网 发布:日本历史书籍推荐知乎 编辑:程序博客网 时间:2024/05/16 12:38

链接: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去从小到大余素数会超时。正确做法是对n开方,依次开1/2 1/3直到结果小于2(最小的素数)


// 超级素数幂.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <cmath>#include <iostream>using namespace std;long long n;long long cal(long long m, long long i) {return i == 0 ? 1 : cal(m, i - 1)*m;}bool isprime(long long n) {for (int i = 2; i*i <= n; i++) {if (n%i == 0) return false;}return true;}int main() {cin >> n;bool flag = 1;long long ans,cnt;for (int i = 2;; i++) {ans = pow(n, 1.0 / (double)i);if (ans < 2.0) break;if ((cal(ans, i)==n) && isprime(ans)) {flag = 0;cnt = i;break;}}if (flag) cout << "No\n";else cout << ans << " " << cnt << endl;}


                                             
0 0
原创粉丝点击