POJ 2407 Relatives 歐拉函數題解

來源:互聯網
上載者:User

標籤:blog   2014   問題   name   代碼   c   

最基本的歐拉函數:

歐拉函數:求小於n的與n互質的個數  
歐蘭函數公式:φ(x)=x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)…..(1-1/pn),其中p1, p2……pn為x的所有質因數  

就是要求這樣的式子啦,不過求這條式子,相信有很多種方法可以求,這個不是難題;

不過問題是如何巧妙地求,如何簡潔地寫出代碼。

直接硬求,或者求出質因數之後求都不是巧妙的方法了,參考了下別人的代碼才知道可以寫的這麼巧妙的。

下面程式可以說是連消帶打地求式子結果,分解質因子,可以如此簡明地把解題思想轉化為電腦程式思維,然後轉化為代碼,這就是高手的境界:

#include <stdio.h>unsigned eulerFunc(unsigned n){unsigned ans = 1;for (unsigned i = 2; i*i <= n; i++){if (n % i == 0){n /= i, ans *= (i-1);while (n % i == 0) n /= i, ans *= i;//把質數除去,巧妙變相分解質因子}}if (n > 1) ans *= (n-1);return ans;}int main(){int n;while (scanf("%d", &n) && n !=0){printf("%d\n", eulerFunc(n));}return 0;}


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.