zoukankan      html  css  js  c++  java
  • 【数论】——欧拉定理

    今天摸鱼看到一道题:

     这不就快速幂裸题吗??

    然后一看数据范围:

     ???这个b的范围吓到我了

    经过一番学习,原来这道题考察的是:

    欧拉定理&扩展欧拉定理

    证明略过,直接上结论:

     

     (图源OI wiki)

    那么这道题就是先处理出欧拉函数,再根据扩展欧拉求解即可。注意b要边输入边取模

    欧拉函数的处理方式:

      类似于线性筛素数,看标程即可,很好理解。

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 typedef long long ll;
     4 const ll M=1e6+10;
     5 ll ans[M],phi[M];
     6 ll cnt;
     7 ll m,a,b;
     8 void Eulersieve(){
     9     phi[1]=1;
    10     for(ll i=2;i<=m;i++){
    11         if(!phi[i]){
    12             for(ll j=i;j<=m;j+=i){
    13                 if(!phi[j]) phi[j]=j;
    14                 phi[j]=phi[j]/i*(i-1);
    15             }
    16         }
    17     }
    18 } 
    19 ll read(){
    20     ll x=0,f=1;
    21     char c=getchar();
    22     while(!isdigit(c)){
    23         if(c=='-') f=-1;
    24         c=getchar();
    25     } 
    26     while(isdigit(c)){
    27         x=x*10+c-'0';
    28         c=getchar();
    29     }
    30     return x*f;
    31 }
    32 ll getb(){
    33     ll x=0,flag=0;
    34     char c=getchar();
    35     while(!isdigit(c)){
    36         c=getchar();
    37     }
    38     while(isdigit(c)){
    39         x=(x*10+c-'0');
    40         if(x>=phi[m]){
    41             flag=1;
    42             x%=phi[m];
    43         }
    44         c=getchar();
    45     }
    46     if(x>=phi[m]){
    47         flag=1;
    48         x%=phi[m];
    49     }
    50     return flag==1?x+phi[m]:x;
    51 }
    52 ll qp(ll n,ll p){
    53     ll res=n,ans=1;
    54     while(p){
    55         if(p&1){
    56             ans=(res*ans)%m;
    57         }
    58         res=(res*res)%m;
    59         p>>=1;
    60     }
    61     return ans;
    62 }
    63 int main(){
    64     a=read();
    65     m=read();
    66     Eulersieve();
    67     b=getb();
    68     printf("%lld",qp(a,b));
    69     return 0;    
    70 }
    ——抓住了时间,却不会利用的人,终究也逃不过失败的命运。
  • 相关阅读:
    02_Python基础
    python 学习网站
    Docker搭建MySQL服务
    Ubuntu源、Python虚拟环境及pip源配置
    Ubuntu18.04完全卸载mysql5.7并安装mysql8.0的安装方法
    MySQL 数据库
    数据库连接池
    ssm整合开发的相关步骤和增删改查
    Springmvc执行流程
    资源映射之----在springmvc中如何访问WEB-INF目录下的文件和系统文件夹中的文件
  • 原文地址:https://www.cnblogs.com/Nelson992770019/p/11517149.html
Copyright © 2011-2022 走看看