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

2021-08-04 06:36:54 字數 873 閱讀 6849

#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

long

long ll;

int p;

int prime[maxn];

int is_prime[maxn];

ll n,ans;

int sum;

//素數篩,預處理素數

void sieve(int n)

is_prime[0]=is_prime[1]=1;

p=0;

for(int i=2;i<=n;i++)}}

}void dfs(int prime_id,int pre_index,ll temp,int num)

//如果約數個數相同,將最優解更新為較小的數

if(num==sum&&ans>temp)

if(prime_id>=16)//只需要用到前面10多個素數

for(int i=1;i<=pre_index;i++)//列舉每個質因子的個數

}}int main()

return0;}

/*以g(12)=6為例,搜尋樹為

11 2 4 8

1 1 3 1 3 9 1 3 9 27

*/

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

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

51nod 1060 最複雜的數 反素數

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

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個數...