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 }
    ——抓住了时间,却不会利用的人,终究也逃不过失败的命运。
  • 相关阅读:
    基于MVC 的Quartz.Net组件实现的定时执行任务调度
    log4net 全局配置
    解决layui选中项下一页清空问题
    layui 子页面向父页面传值
    mvc session设置时间不起作用
    单个进程中最大线程数探索
    Linux CPU的中断【转载】
    Linux的CPU相关知识
    项目管理利器-Maven(Windows安装)
    Oracle的四种连接方式【转载】
  • 原文地址:https://www.cnblogs.com/Nelson992770019/p/11517149.html
Copyright © 2011-2022 走看看