zoukankan      html  css  js  c++  java
  • 欧拉函数

    欧拉函数

    定义:对于一个正整数 n ,小于 n 且和 n 互质的正整数(包括 1)的个数,记作 φ(n) 

    比如:n = 8 时,有 1,3,5,7 与它互质,所以 φ(8) = 4

    函数计算公式:φ(n)=n*(1-1/p1)*(1-1/p2)*...*(1-1/pn) ,其中p1,p2,...,pn位n的质因子

    易知,如果n为质数,一定有 φ(n) = n-1

    函数的几个性质:

    1、φ(1)=1

    2、φ(pk)=pkpk1=(p1)pk1,其中p为质数

    3、φ(mn)=φ(m)φ(n),其中gcd(m,n)=1

    欧拉定理

       若n,a为正整数,且n,a互素(即gcd(a,n)=1),则 a^{varphi(n)} equiv 1 pmod n 。

       换种说法就是 a^ φ(n) % n 恒等于 1. 

          特别的,当n是质数的时候,上式就变成了a^{n - 1} equiv 1 pmod n ,它也叫费马小定理,但它是个单向定理,不能用这个同余证n是质数。

    原根

    gcd(a,m)=1时,定义a对模m的指数 Ord_m(a)  为使 a^d equiv 1 pmod{m} 成立的最小的正整数d。由欧拉定理知 Ord_m(a) 一定小于等于  phi (m) ,

    Ord_m (a) = phi (m),则称a是模m的原根。

    m的原根个数正好为φ(φ(m)) (在m是素数情况下进一步知原根的个数是φ(m-1) )

    例:poj-1284  http://poj.org/problem?id=1284

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<cmath>
     5 using namespace std;
     6 #define N 1000005
     7 int p[N];
     8 void fun(){ //素数表
     9     int i, j, k;
    10     memset(p, 0, sizeof(p));
    11     p[1] = 1;
    12     for(i=2; i<=sqrt(N); i++){
    13         for(j=2; j<=N/i; j++){
    14             p[i*j] = 1;
    15         }
    16     }
    17 }
    18 int oula(int n){
    19     int i, j, r, a;
    20     r = n;
    21     a = n;
    22     for(i=2; i<=sqrt(n); i++){
    23         if(!p[i]){
    24             if(a%i==0){
    25                 r = r/i * (i-1);
    26                 while(a%i==0)
    27                     a /= i;
    28             }
    29         }
    30     }
    31     if(a>1)
    32         r = r/a*(a-1);
    33     return r;
    34 }
    35 
    36 int main(){
    37     int n;
    38     while(cin>>n){
    39        // cout<<oula(oula(n))<<endl; //一般情况
    40         cout<<oula(n-1)<<endl; //n为奇素数时
    41     }
    42     return 0;
    43 }
  • 相关阅读:
    仿网易/QQ空间视频列表滚动连播炫酷效果
    UIScrollerView当前显示3张图
    iOS AVPlayer视频播放器
    iOS 购物车动画
    C++从零实现简单深度神经网络(基于OpenCV)
    Android 轻松实现仿淘宝地区选择
    微信小程序之下拉刷新,上拉更多列表实现
    iOS 指南针
    tableView 获取网络图片,并且设置为圆角(优化,fps)
    黑客技术 —— Linux 命令行
  • 原文地址:https://www.cnblogs.com/wudi-accept/p/5666664.html
Copyright © 2011-2022 走看看