藍橋杯C 試題 演算法提高 尤拉函式

2021-10-05 15:04:32 字數 864 閱讀 3980

老師出了一道難題,小醬不會做,請你編個程式幫幫他,獎金一瓶醬油:

從1—n中有多少個數與n互質?

|||||╭══╮ ┌═════┐

╭╯讓路║═║醬油專用車║

╰⊙═⊙╯ └══⊙═⊙═(坑爹的題面格式化,害得我用『|』來代替空格,複製到記事本上看就變成正版的了)

輸入共一行,表示乙個整數n。

輸出共一行,表示從1—n中與n互質的數的個數。

60%的資料≤10^6

100%的資料≤2*10^9

尤拉函式phi(n)是數論中非常重要的乙個函式,其表示1到n-1之間,與n互質的數的個數。顯然的,我們可以通過定義直接計算phi(n)。

當然,phi(n)還有這麼一種計算方法。

首先我們對n進行質因數分解,不妨設n=p1^a1 * p2^a2 * ... * pk^ak (這裡a^b表示a的b次冪,p1到pk為k個互不相同的質數,a1到ak均為正整數),那麼

phi(n)=n(1-(1/p1))(1-(1/p2))....(1-(1/pk))

稍稍化簡一下就是

phi(n)=n(p1-1)(p2-1)...(pk-1)/(p1*p2*...*pk)

計算的時候小心中間計算結果超過int型別上界,可通過調整公式各項的計算順序避免(比如先做除法)!

#include using namespace std;

//尤拉函式直接篩選

long long direct_phi(long long x)}}

if (x > 1)

return ans;

}int main(int argc, char** ar**)

藍橋杯試題 演算法提高 尤拉函式 數論

藍橋杯試題 演算法提高 尤拉函式 數論 資源限制 時間限制 1.0s 記憶體限制 256.0mb 問題描述 老師出了一道難題,小醬不會做,請你編個程式幫幫他,獎金一瓶醬油 從1 n中有多少個數與n互質?讓路 醬油專用車 坑爹的題面格式化,害得我用 來代替空格,複製到記事本上看就變成正版的了 輸入格式...

藍橋杯 ADV 106 演算法提高 尤拉函式

演算法提高 尤拉函式 時間限制 1.0s 記憶體限制 512.0mb 說明2016.4.5 已更新試題,請重新提交自己的程式。問題描述 給定乙個大於1,不超過2000000的正整數n,輸出尤拉函式,phi n 的值。如果你並不了解尤拉函式,那麼請參閱提示。輸入格式 在給定的輸入檔案中進行讀入 一行乙...

演算法提高 尤拉函式

說明 2016.4.5 已更新試題,請重新提交自己的程式。問題描述 給定乙個大於1,不超過2000000的正整數n,輸出尤拉函式,phi n 的值。如果你並不了解尤拉函式,那麼請參閱提示。輸入格式 在給定的輸入檔案中進行讀入 一行乙個正整數n。輸出格式 將輸出資訊輸出到指定的檔案中 一行乙個整數表示...