藍橋杯試題 演算法提高 尤拉函式[數論]
資源限制
時間限制:1.0s 記憶體限制:256.0mb
問題描述
老師出了一道難題,小醬不會做,請你編個程式幫幫他,獎金一瓶醬油:
從1—n中有多少個數與n互質?
|||||╭══╮ ┌═════┐
╭╯讓路║═║醬油專用車║
╰⊙═⊙╯ └══⊙═⊙═(坑爹的題面格式化,害得我用『|』來代替空格,複製到記事本上看就變成正版的了)
輸入格式
輸入共一行,表示乙個整數n。
輸出格式
輸出共一行,表示從1—n中與n互質的數的個數。
樣例輸入
30
樣例輸出
8
資料規模和約定
60%的資料≤10^6
100%的資料≤2*10^9
題解:
所以現在我們要把n的每乙個素因子弄出來就可以了!然後通過公式求解出尤拉函式的值。
這個過程的我想大家還需要了解乙個唯一分解定理:任何乙個正整數都可以素因子分解為n = p1 e1 * p2e2 * … * prer; (其中pr是< n 的素數因子)。[想要進一步了解唯一分解定理求乙個數n的因子數和n^2因子數[數論] ]
通過唯一分解定理就能求出n的所有素因子pi了,然後就可以通過公式計算出尤拉函式的值了。
上**(有比較全面的注釋):
#include
#include
#define ll long long int
using namespace std;
voidol(
int n)
if(n==1)
break
;//分解完畢 }if
(n!=1)
//n本身就是乙個素數,故無法分解
printf
("%lld\n"
,ans)
;return;}
//如果是多測試用例就先使用埃氏篩預處理出素數表,然後再對n進行素因子分解,求出素因子
intmain
(void
)
藍橋杯C 試題 演算法提高 尤拉函式
老師出了一道難題,小醬不會做,請你編個程式幫幫他,獎金一瓶醬油 從1 n中有多少個數與n互質?讓路 醬油專用車 坑爹的題面格式化,害得我用 來代替空格,複製到記事本上看就變成正版的了 輸入共一行,表示乙個整數n。輸出共一行,表示從1 n中與n互質的數的個數。60 的資料 10 6 100 的資料 2...
尤拉函式(數論)
尤拉函式的定義 對正整數n,尤拉函式是小於等於n的數中與n互質的數的數目。我們令f n 為尤拉函式 1 其中當n 1時,f 1 1,沒有任何實質的意義。2 特別的如果兩個素數p和q,且n pq,則f n p 1 q 1 3 若n是質數p的k次冪,f n p k p k 1 p 1 p k 1 因為除...
藍橋杯 ADV 106 演算法提高 尤拉函式
演算法提高 尤拉函式 時間限制 1.0s 記憶體限制 512.0mb 說明2016.4.5 已更新試題,請重新提交自己的程式。問題描述 給定乙個大於1,不超過2000000的正整數n,輸出尤拉函式,phi n 的值。如果你並不了解尤拉函式,那麼請參閱提示。輸入格式 在給定的輸入檔案中進行讀入 一行乙...