51Nod 1060 最複雜的數

2021-07-03 11:52:58 字數 1271 閱讀 6599

把乙個數的約數個數定義為該數的複雜程度,給出乙個n,求1-n中複雜程度最高的那個數。

例如:12的約數為:1 2 3 4 6 12,共6個數,所以12的複雜程度是6。如果有多個數複雜度相等,輸出最小的。

input

第1行:乙個數t,表示後面用作輸入測試的數的數量。(1 <= t <= 100)

第2 - t + 1行:t個數,表示需要計算的n。(1 <= n <= 10^18)

output

共t行,每行2個數用空格分開,第1個數是答案,第2個數是約數的數量。
input示例

5110

1001000

10000

output示例

1 1

6 460 12

840 32

7560 64

解題思路:尋找該區間內最大的反素數即為答案。
反素數具有兩個性質
(1)反素數為從2開始的連續的素數冪的乘積
(2)假設x=p1^a1*p2^a2*p3^a3....,則肯定滿足p1>=p2>=p3
我們可以利用上述兩條性質利用dfs+剪枝來搜尋。
#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;

/* 反素數的性質:

(1) 乙個反素數的質因子必然是從2開始連續的質數

(2) p=2^t1*3^t2*5^t3*7^t4...,必然t1>=t2>=t3....

*/typedef unsigned long long ull;

const ull inf = 0x3f3f3f3f3f3f3f3fll;

int prime[20] = ;

ull n;

ull ans;

ull maxnum;

int t;

void dfs(int pos, int lim, ull cur, ull num)

if(num == maxnum && cur < ans)

for(int i = 1; i <= lim; ++i)

return ;

}int main()

return 0;

}

51nod 1060 最複雜的數

1060 最複雜的數 ural 1748 基準時間限制 1 秒 空間限制 131072 kb 分值 40 難度 4級演算法題 把乙個數的約數個數定義為該數的複雜程度,給出乙個n,求1 n中複雜程度最高的那個數。例如 12的約數為 1 2 3 4 6 12,共6個數,所以12的複雜程度是6。如果有多個...

最複雜的數 51Nod 1060

反素數反素數 8005979?fr aladdin 題目等價於求1 n內最大的反素數 由其兩個性質 可以直接爆搜 還有注意細節處理 判斷當前值乘某個素因子是否符合條件時 要兩邊同除該素因子 否則爆long long include using namespace std define ll long...

51nod 1060 最複雜的數(反素數)

最複雜的數 學習 把乙個數的約數個數定義為該數的複雜程度,給出乙個n,求1 n中複雜程度最高的那個數。例如 12的約數為 1 2 3 4 6 12,共6個數,所以12的複雜程度是6。如果有多個數複雜度相等,輸出最小的。input 第1行 乙個數t,表示後面用作輸入測試的數的數量。1 t 100 第2...