牛客練習賽14 A n的約數(詳解)

2021-08-18 04:42:39 字數 958 閱讀 3217

時間限制:c/c++ 1秒,其他語言2秒

空間限制:c/c++ 262144k,其他語言524288k

64bit io format: %lld

t次詢問,每次給你乙個數n,求在[1,n]內約數個數最多的數的約數個數

第一行乙個正整數t

之後t行,每行乙個正整數n

輸出t行,每行乙個整數,表示答案
分析:1)約數個數定理:

對於乙個大於1的正整數n可以分解質因數:

則n的正約數個數是:

p1,p2,p3……是質數

2)對於12=2^2*3,18=2*3^2,可見約數個數相同的數,質數的指數大的約靠前,我們越能得到較小的數,所以給指數乙個上限,(根據題目2^q不超過最大n值即可),讓下乙個素數的指數小於這個素數的指數。

3)**中的num表示1-n中約數最多的數。

if(t>maxn||(t==maxn&&mt表示當前數的約數個數,maxn表示最大的約數個數,m表示的是當前的數,可見,當t>max時或等於且m**如下:

#include#include#define ll long long

using namespace std;

int a[20]=;

ll n,num,maxn;//maxn表示1-n內最大的約數個數,num表示最大約數的數

void dfs(ll m,ll f,ll t,ll pr)

ll z=1,yg,now=m;//z當前素數的指數,yg約數個數,now記錄當前值的變化

while(z<=pr)

yg=t*z;//約數的個數=當前約數的個數*素數的指數加1(z每次都先+1了)

now=now*a[f];

dfs(now,f+1,yg,z-1);//下乙個素數的指數要小於這個素數的指數所以z-1

}}int main()

}

牛客練習賽14 A n的約數

n的約數 時間限制 c c 1秒,其他語言2秒 空間限制 c c 262144k,其他語言524288k 64bit io format lld t次詢問,每次給你乙個數n,求在 1,n 內約數個數最多的數的約數個數 第一行乙個正整數t 之後t行,每行乙個正整數n輸出t行,每行乙個整數,表示答案 根...

牛客網練習賽14 n的約數

題目 t次詢問,每次給你乙個數n,求在 1,n 內約數個數最多的數的約數個數 1 n 1000000000000000000 18個0 參考了大佬的 自己理解的,還有一部分還沒有搞明白 首先,每乙個正整數都能通過互不相同的素數的次方的積得出,下面是一條公式 設n p1 k1 p2 k2 pn kn,...

牛客練習賽9

時間限制 c c 1秒,其他語言2秒 空間限制 c c 32768k,其他語言65536k 64bit io format lld 珂朵莉想每天都給威廉送禮物,於是她準備了n個自己的本子 她想送最多的天數,使得每天至少送乙個本子,但是相鄰兩天送的本子個數不能相同 珂朵莉最多送幾天禮物呢 第一行乙個整...