演算法提高 尤拉函式

2021-08-28 09:06:08 字數 884 閱讀 2585

說明

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

問題描述

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

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

輸入格式

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

一行乙個正整數n。

輸出格式

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

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

樣例輸入

樣例輸出

提示尤拉函式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 #include #include using namespace std;

const int maxn=2000000;

int phi[maxn];

void euler1()

//類似於篩選法

void euler3(int n)}}

}int main()

尤拉函式演算法

尤拉函式 1 2 尤拉函式 3小於或等於n的正整數中,與n互質的數的數目4 5 include6 define n 3000005 7 int64 ans n 8void init 打表法 916 17int euler int n 直接求法 1826 27 28if n 1 ret n 1 29 ...

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

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

尤拉函式 尤拉定理

尤拉函式 對正整數 n,尤拉函式 是小於等於 n的數中與 n互質的數的數目 此函式以其首名研究者尤拉命名 euler so totientfunction 它又稱為 euler stotient function 函式 尤拉商數等。例如 8 4,因為 1,3,5,7均和8 互質。注 n為1時尤拉函式...