python輸出超級素數 超級素數冪

2021-10-11 21:59:10 字數 1023 閱讀 2917

問題描述

如果乙個數字能表示為pq(表示冪運算)且p為乙個素數,q為大於1的正整數就稱這個數叫做超級素數冪。現在給出乙個正整數n,如果n是乙個超級素數冪需要找出對應的p,q。

輸入描述

輸入乙個正整數n(2 ≤ n ≤ 10^18)

輸出描述

如果n是乙個超級素數冪則輸出p,q,以空格分隔,行末無空格。

如果n不是超級素數冪,則輸出no

輸入例子

輸出例子

3 3分析

n = p^q,n=[2, 10^18],顯然p的範圍很大,沒法列舉;q作為指數項,最大值為logn,是可以列舉。所以我們可以窮舉q,反求p,判斷p是不是整數和素數,如果是整數則表示找到一組解了。

note

按照題目的說法,超級素數冪的p q對是唯一的;

如何找到合適的可列舉空間是解決問題的關鍵。

**#include

#include

#include

using namespace std;

bool isprime(long long l)

for (long long i = 2; i <= sqrt(l); i++)

if (l % i == 0) return false;

return true;

int main()

long long n;

scanf("%lld", &n);

long long m = log(n) / log(2);

for (int i = 2; i <= m; i++)

double d = pow(n, 1.0 / i);

long long l = (long long)d;

if (abs(d - l) > 0.0001)

continue;

if (isprime(l))

printf("%lld %d\n", l, i);

return 0;

printf("no\n");

return 0;

超級素數冪

輸入描述 輸入乙個正整數n 2 n 10 18 輸出描述 如果n是乙個超級素數冪則輸出p,q,以空格分隔,行末無空格。如果n不是超級素數冪,則輸出no 輸入例子 27 輸出例子 3 3 解析 直接用整數n去從小到大餘素數會超時。正確做法是對n開方,依次開1 2 1 3直到結果小於2 最小的素數 超級...

超級素數冪

如果乙個數字能表示為p q 表示冪運算 且p為乙個素數,q為大於1的正整數就稱這個數叫做超級素數冪。現在給出乙個正整數n,如果n是乙個超級素數冪需要找出對應的p,q。include include using namespace std 素數判定函式 bool isprime int n for i...

超級素數實現演算法

1.超級素數的概念 乙個m位數的素數,從高位到低位一次去掉乙個數,仍然都是素數。輸入m,輸出m為超級素數的總個數並且輸出最大m為的超級素數 2.分析 可以從兩個方向出發 1 從1位開始找素數,然後一步步加位數,查詢素數 2 從m位開始找,然後在去掉最高位,在查詢素數。不管是什麼方法,我們都發現,超級...