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

2021-10-02 14:52:31 字數 1077 閱讀 4073

演算法提高 尤拉函式  

時間限制:1.0s   記憶體限制:512.0mb

說明2016.4.5 已更新試題,請重新提交自己的程式。

問題描述

給定乙個大於1,不超過2000000的正整數n,輸出尤拉函式,phi(n)的值。

如果你並不了解尤拉函式,那麼請參閱提示。

輸入格式

在給定的輸入檔案中進行讀入:

一行乙個正整數n。

輸出格式

將輸出資訊輸出到指定的檔案中:

一行乙個整數表示phi(n)。

樣例輸入

17樣例輸出

16提示

尤拉函式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 int main()

; int n_fac = 0;

scanf("%d", &n);

int dump = n, fac = 2;

while (dump > 1)

fac++;

}int phi = n;

for (int i = 0; i < n_fac; ++i)

phi /= factors[i];

for (int i = 0; i < n_fac; ++i)

phi *= (factors[i] - 1);

printf("%d", phi);

return 0;

}

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

老師出了一道難題,小醬不會做,請你編個程式幫幫他,獎金一瓶醬油 從1 n中有多少個數與n互質?讓路 醬油專用車 坑爹的題面格式化,害得我用 來代替空格,複製到記事本上看就變成正版的了 輸入共一行,表示乙個整數n。輸出共一行,表示從1 n中與n互質的數的個數。60 的資料 10 6 100 的資料 2...

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

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

藍橋杯 ADV 131演算法提高 選擇排序

問題描述 排序,顧名思義,是將若干個元素按其大小關係排出乙個順序。形式化描述如下 有n個元素a 1 a 2 a n 從小到大排序就是將它們排成乙個新順序a i 1 i k 為這個新順序。選擇排序的思想極其簡單,每一步都把乙個最小元素放到前面,如果有多個相等的最小元素,選擇排位較考前的放到當前頭部。還...