約數的個數 貪心

2022-06-27 05:42:15 字數 978 閱讀 2225

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

第一行乙個正整數t

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

輸出t行,每行乙個整數,表示答案
示例1

5139

11316

641

66

對於100%的資料,t <= 500 , 1 <= n <= 1000000000000000000

題意 :給你乙個 n ,詢問 從 1 到 n 約數個數最多的數的約數個數是幾個。

思路 :首先能想到的暴力肯定是不可解的, n 太大了

在數學上有乙個叫約數定理的東東,任意乙個數可以寫成一些質因子冪次的乘積,x = p1^a1*p2^a2*p3^a3 , 那麼約數的個數就等於(a1+1)*(a2+1)*(a3+1),

但是呢這個題不能去找每個數的質因數,會超時的,我們可以反著來,通過已知的質因子去尋找比 n 小的數,但是單純這樣還是會超時,我們來看乙個12 = 2^2*3 , 18 = 2*3^2 ,

這兩個數的約數個數是相同的,如果讓選的話優先會挑選小的那個數,觀察一下小的數會發現因子小的次冪是偏大的,那麼就可以貪心的選取了,下乙個數的次冪一定是小於等於當前數的次冪的。

**示例:

#define ll long long

const ll maxn = 1e6+5;

const double pi = acos(-1.0);

const ll inf = 0x3f3f3f3f;

ll n;

ll a[35] = ;

ll ans;

void dfs(ll x, ll sum, ll k, ll ci)

}int main()

return 0;

}

在資料偏大的時候一定要想著可能會超 long long ,那麼這時候有些關係能用除解決,就盡量不要用乘的!!

約數的個數

輸入n個整數,依次輸出每個數的約數的個數。輸入的第一行為n,即陣列的個數 n 1000 接下來的1行包括n個整數,其中每個數的範圍為 1 num 1000000000 當n 0時輸入結束。可能有多組輸入資料,對於每組輸入資料,輸出n行,其中每一行對應上面的乙個數的約數的個數。6 1 4 6 8 10...

約數的個數

題目描述 輸入n個整數,依次輸出每個數的約數的個數。輸入描述 輸入的第一行為n,即陣列的個數 n 1000 接下來的1行包括n個整數,其中每個數的範圍為 1 num 1000000000 當n 0時輸入結束。輸出描述 可能有多組輸入資料,對於每組輸入資料,輸出n行,其中每一行對應上面的乙個數的約數的...

約數的個數

對於約數個數的求法,開始我的 是逐個列舉取餘,這當然是乙個很簡單易懂的方法。但是整個程式的時間複雜度達到o n m 對於超級大的測試樣例來說,這顯然不可取。cin n個整數,cout 每乙個整數的約數個數 include include using namespace std 求約數個數 int f...