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

2021-10-06 00:11:19 字數 1169 閱讀 2489

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

資源限制

時間限制: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 的值。如果你並不了解尤拉函式,那麼請參閱提示。輸入格式 在給定的輸入檔案中進行讀入 一行乙...