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 }
  • 相关阅读:
    鼠标和滚轮事件
    UI事件
    跨浏览器的事件对象
    DOM中的事件对象和IE事件对象
    Monolog手册参考
    nginx 配置
    es elasticsearch-head安装
    es ik分词插件安装
    yii2.0+es
    php分词工具scws
  • 原文地址:https://www.cnblogs.com/suishiguang/p/6040443.html
Copyright © 2011-2022 走看看