1060
最複雜的數
把乙個數的約數個數定義為該數的複雜程度,給出乙個n,求1-n中複雜程度最高的那個數。
例如:12的約數為:1 2 3 4 6 12,共6個數,所以12的複雜程度是6。如果有多個數複雜度相等,輸出最小的。
input
第1行:乙個數t,表示後面用作輸入測試的數的數量。(1 <= t <= 100)output第2 - t + 1行:t個數,表示需要計算的n。(1 <= n <= 10^18)
共t行,每行2個數用空格分開,第1個數是答案,第2個數是約數的數量。input示例
5110output示例1001000
10000
1 16 460 12
840 32
7560 64
想了很久的一題。沒想到這種數叫反素數,用dfs可以很快求解。部落格中講的很清楚:
#include#define ll unsigned long long
using namespace std;
const ll inf=1e18;
int prime[16]=,sans;
ll n,ans;
void dfs(ll sum,int dep,int lim,int num)
else if(num==sans&&ans>sum)
for(int i=1;i<=lim;i++)
{if(n/prime[dep]>t;
while(t--)
{cin>>n;
ans=inf;
sans=0;
dfs(1,0,60,1);
cout<
51nod 1060 最複雜的數(反素數)
最複雜的數 學習 把乙個數的約數個數定義為該數的複雜程度,給出乙個n,求1 n中複雜程度最高的那個數。例如 12的約數為 1 2 3 4 6 12,共6個數,所以12的複雜程度是6。如果有多個數複雜度相等,輸出最小的。input 第1行 乙個數t,表示後面用作輸入測試的數的數量。1 t 100 第2...
51nod 1060 最複雜的數(反素數)
include using namespace std 求 1,n 中約數最多的數和約數的個數 1 n e 18 反素數對於任何正整數x,其約數的個數記做g x 例如g 1 1,g 6 4.如果某個正整數x滿足 對於任意i 0 s2 s3 const int maxn 1e3 5 typedef l...
51Nod 1060 最複雜的數
把乙個數的約數個數定義為該數的複雜程度,給出乙個n,求1 n中複雜程度最高的那個數。例如 12的約數為 1 2 3 4 6 12,共6個數,所以12的複雜程度是6。如果有多個數複雜度相等,輸出最小的。input 第1行 乙個數t,表示後面用作輸入測試的數的數量。1 t 100 第2 t 1行 t個數...