zoukankan      html  css  js  c++  java
  • 济南学习 Day 5 T1 pm

    欧拉函数(phi)
    题目描述:

      已知(N),求phi(N).

    输入说明:

      正整数N。

    输出说明:

      输出phi(N)。

    样例输入:

      8

    样例输出:

      4

    数据范围:

      对于20%的数据,N<=10^5

      对于60%的数据,N<=10^9

      对于100%的数据,N<=10^18

    在这里先普及一下欧拉函数:

      

      在数论,对正整数n,欧拉函数varphi(n)是少于或等于n的数中与n互质的数的数目。此函数以其首名研究者欧拉命名,它又称为Euler's totient function、φ函数、欧拉商数等。 

                             

      例如varphi(8)=4,因为1,3,5,7均和8互质。

      从欧拉函数引伸出来在环论方面的事实和拉格朗日定理构成了欧拉定理的证明。

     1 #include<iostream>
     2 #include<cstdio>
     3 #define ll long long
     4 #define N 1000010LL
     5 using namespace std;
     6 ll prime[N],c[N],P[N],f[N],num,n;
     7 ll poww(ll a,ll b)
     8 {
     9     ll base=a,r=1;
    10     while(b)
    11     {
    12         if(b&1)r*=base;
    13         base*=base;
    14         b/=2;
    15     }
    16     return r;
    17 }
    18 int main()
    19 {
    20     cin>>n;
    21     for(ll i=2;i<=min(n,N-1);i++)
    22     {
    23         if(!f[i])
    24         {
    25             prime[++num]=i;P[i]=num;
    26             for(ll j=2;i*j<=min(n,N-1);j++)
    27               f[i*j]=1;
    28         }
    29     }
    30     ll x=n;
    31     for(ll i=1;i<=num;i++)
    32     {
    33         ll p=prime[i];
    34         while(x%p==0)c[i]++,x/=p;
    35         if(x<N)if(!f[x])
    36         {
    37             c[P[x]]++;break;
    38         }
    39         if(x==1)break;
    40     }
    41     ll ans=1;
    42     for(ll i=1;i<=num;i++)
    43       if(c[i])ans*=(prime[i]-1)*poww(prime[i],c[i]-1);
    44     if(x>N)ans*=(x-1);
    45     cout<<ans;
    46     return 0;
    47 }
  • 相关阅读:
    如何在Mac终端中进入含空格文件名的文件夹
    redis测试常用工具及方法
    Spark3.0 Standalone模式部署
    使用Quorum Journal Manager(QJM)的HDFS NameNode高可用配置
    任务-实业-化工:王永庆
    节日-传统节日:排灯节
    葡萄科:乌蔹梅
    植物界:蕨类植物门
    修辞手法-汉语-词语:明喻
    修辞手法-汉语-词语:隐喻
  • 原文地址:https://www.cnblogs.com/suishiguang/p/6040443.html
Copyright © 2011-2022 走看看