初等數論中的歐拉公式


  求小於n的數里,與n互為素數的個數

一.

  奇數和偶數是否一定互素(排除1,不是比如6和9);1和不和任意數互素(比如6采用歐拉定理驗證下)。

  若n已經進行唯一分解,直接歐拉公式。

  如果n的標准素因子分解式是p1^a1*p2^a2*……*pm^am,其中眾pj(j=1,2,……,m)都是素數,而且兩兩不等。則有 φ(n)=n(1-1/p1)(1-1/p2)……(1-1/pm) 利用容斥原理可以證明它。

二.不知唯一分解

  

 1 #include<iostream>
 2 #include<stdio.h>
 3 using namespace std;
 4 
 5 int main()
 6 {
 7     int n,i;
 8     double sum;
 9     while(scanf("%d",&n)&&n)
10     {
11         sum=n;
12         //還是運用了歐拉公式 
13         if(n%2==0)//2也是素數 
14         {
15             sum*=(double)(1 - 1.0/2);//為了突出關系寫成了 (1 - 1.0/2) ,里面一定是1.0 
16             while(n%2==0)
17                 n/=2;
18         }
19     
20         /*類似篩法的思想,已經去掉了2及其倍數,下面找奇因子,必須從小到大枚舉,
21         3枚舉到的話立馬除盡3及其倍數防止再次枚舉9(這樣就不對了) 
22         */ 
23         for(i=3;n>1;i+=2)
24         {
25             if(n%i==0)
26                 sum*=(1-(double)1/i);
27             while(n%i==0)
28                 n/=i;
29         }
30         printf("%d\n",(int)sum);
31     }
32     //while(1); 
33     return 0;
34 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM