zoukankan      html  css  js  c++  java
  • 【欧拉定理】BZOJ3884-上帝与集合的正确用法

    【题目大意】

    求2^(2^(2^(2^(2^...)))) mod p。

    【思路】

    蒟蒻在知道用欧拉做的前提下,对这题目瞪了好久没有明白,看了正解扑通一声跪下来orz直接搬运popoqqq大爷的吧反正有水印(.

    【错误点】

    快速幂没有开longlong……

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 typedef long long ll;
     6 using namespace std;
     7 
     8 int get_phi(int x)
     9 {
    10     int res=x;
    11     for (int i=2;i*i<=x;i++)
    12     {
    13         if (x%i==0)
    14         {
    15             res-=res/i;
    16             while (x%i==0) x/=i;
    17         }
    18     }
    19     if (x>1) res-=res/x;
    20     return res;
    21 }
    22 
    23 int quick_power(ll x,int y,int MOD)//这里有可能会溢出,用long long
    24 {
    25     ll ret=1;
    26     while (y)
    27     {
    28         if (y&1) ret=(ret*x)%MOD;
    29         x=(x*x)%MOD;
    30         y>>=1;
    31     }
    32     return ret;
    33 }
    34 
    35 int solve(int p)
    36 {
    37     if (p==1) return 0;
    38     int k=0;
    39     while (!(p&1)) p>>=1,++k;
    40     int phi=get_phi(p);
    41     int re=solve(phi);
    42     re=(re-k%phi+phi)%phi;
    43     int ans=quick_power(2,re,p)%p;
    44     return (ans<<k);
    45 }
    46 
    47 void init()
    48 {
    49     int T;
    50     scanf("%d",&T);
    51     while (T--)
    52     {
    53         int p;
    54         scanf("%d",&p);
    55         printf("%d
    ",solve(p));
    56     }
    57 }
    58 
    59 int main()
    60 {
    61     init();
    62     return 0;
    63 }
  • 相关阅读:
    uart协议--Verilog及仿真
    DC综合的流程
    modelsim将vcd文件转换成wlf文件并查看波形
    将系统盘还原成原来的普通u盘
    Ubuntu的操作命令
    gvim快捷键
    dc_shell环境下TCL语言的使用
    AHB总线学习
    Ubuntu文件共享
    Linux基础学习 | 目录及文件
  • 原文地址:https://www.cnblogs.com/iiyiyi/p/5914765.html
Copyright © 2011-2022 走看看