国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

[POJ2407]歐拉函數的值

2019-11-11 01:21:50
字體:
來源:轉載
供稿:網友

原題

題目描述

給定整數n,求n的歐拉函數的值

輸入

多組數據 每行一個整數,表示n( 1 <= n <= 1,000,000,000) 一個0,表示輸入結束

輸出

每行輸入一個整數,表示對應的n的歐拉函數值

樣例輸入

7 12 0

樣例輸出

6 4

分析

要解決這道題,我們先來了解什么是歐拉函數和歐拉定理。

歐拉函數φ:不超過n的且與n互質的正整數的個數。 如果n為素數p,則φ(p)=p?1 如果n為素數p的冪次pa,則φ(pa)=(p?1)?pa?1. 歐拉函數為積性函數:如果n為任意兩個互質的數a、b的積,則φ(n)=φ(a)?φ(b)

n=p1a1?p2a2?……?pkakφ(n)=n?(1?1/p1)?(1?1/p2)?……?(1?1/pk)

歐拉定理: 若a與m互質,則aφ(m)≡1(mod m)

所以,我們就得出了歐拉計算函數。

int euler(int n){ int m=int(sqrt(n+0.5)),ans=n; for(int i=2;i<=m;i++) if(n%i==0){ ans=ans/i*(i-1); while(n%i==0) n/=i; } if(n>1) ans=ans/n*(n-1); return ans;}

源代碼

#include<iostream>#include<cstdio>#include<cmath>using namespace std;int euler(int n){ int m=int(sqrt(n+0.5)),ans=n; for(int i=2;i<=m;i++) if(n%i==0){ ans=ans/i*(i-1); while(n%i==0) n/=i; } if(n>1) ans=ans/n*(n-1); return ans;}int main(){ int x; while(scanf("%d",&x)&&x)
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 江孜县| 三亚市| 会理县| 衡阳市| 平利县| 邮箱| 东乡县| 浦县| 泾阳县| 扬中市| 龙里县| 宁晋县| 宾阳县| 灵山县| 新田县| 上虞市| 包头市| 泽普县| 阳朔县| 青河县| 新化县| 宕昌县| 武隆县| 深圳市| 镇巴县| 石楼县| 辽源市| 遂川县| 区。| 饶阳县| 四平市| 宜州市| 甘泉县| 易门县| 鹤壁市| 涞水县| 吴桥县| 朝阳县| 博野县| 嘉义县| 台中市|