• 欧拉定理、欧拉函数、a/b%c


    怕忘了……

    欧拉函数 定义、证明、打表方法

    欧拉定理 定义、证明

    https://blog.csdn.net/zzkksunboy/article/details/73061013

    剩余系、完系、简系

    证明相当精彩!

    而1~a*b中关于a*b的每个系有且仅有一个。


    勿忘:积性函数指对于所有互质的整数a和b有性质f(ab)=f(a)f(b)的数论函数。

    ====================================================================

    https://blog.csdn.net/u014074562/article/details/50990326

    a^b%c

    在b非常大时的情况,

    [前提 (a,c)=1]

    因为a^phi(c)%c = 1

    a^b%c=a^(b%phi(c))%c

    c为素数时,phi(c)=c-1。

    [无前提]

    b>=phi(c)时,a^b%c=a^(b%phi(c)+phi(c))%c

    b<phi(c)时,a^b%c=a^(b%phi(c))%c (前面的定理不一定正确)

    证明:

    https://www.luogu.org/problemnew/solution/P5091

    例子:

    a=d c=d^e b=d^f e>f

    如a=2 b=1024 c=2

    P5091 【模板】欧拉定理

     1 #include <cstdio>
     2 #include <cstdlib>
     3 #include <cmath>
     4 #include <cstring>
     5 #include <string>
     6 #include <algorithm>
     7 #include <iostream>
     8 using namespace std;
     9 #define ll long long
    10 
    11 const double eps=1e-8;
    12 const ll inf=1e9;
    13 const ll mod=1e9+7;
    14 const int maxn=1e6+10;
    15 //const int maxlen=2e7+10;
    16 
    17 int phi[maxn],zhi[maxn],cnt_zhi;
    18 bool vis[maxn];
    19 int maxv=1e6;
    20 //char str[maxn];
    21 
    22 ll mul(ll a,ll b,ll m)
    23 {
    24     ll y=1;
    25     while (b)
    26     {
    27         if (b&1)
    28             y=y*a%m;
    29         a=a*a%m;
    30         b>>=1;
    31     }
    32     return y;
    33 }
    34 
    35 int main()
    36 {
    37     ///互质:它们的公因数只有1
    38     ///i=1~m的phi(i) 顺便求出
    39 
    40     bool use=0;
    41     int i,j,k,a,b,m;
    42     char c;
    43     phi[1]=1;///
    44     for (i=2;i<=maxv;i++)
    45     {
    46         if (!vis[i])
    47         {
    48             zhi[++cnt_zhi]=i;
    49             phi[i]=i-1;
    50         }
    51         for (j=1;j<=cnt_zhi;j++)
    52         {
    53             k=i*zhi[j];
    54             if (k>maxv)
    55                 break;
    56             vis[k]=1;
    57             if (i%zhi[j]==0)
    58             {
    59                 phi[k]=phi[i]*zhi[j];
    60                 break;
    61             }
    62             else
    63                 phi[k]=phi[i]*(zhi[j]-1);
    64         }
    65     }
    66 
    67 
    68     scanf("%d%d ",&a,&m);
    69     b=0;
    70     while ((c=getchar())!=EOF)
    71     {
    72         if (!(c>=48 && c<=57))
    73             break;
    74 
    75         b=b*10+c-48;
    76         if (b>=phi[m])
    77             use=1;
    78         b=b%phi[m];
    79 //        b=(b*10+c-48)%phi[m];
    80     }
    81 
    82     if (use)
    83         printf("%lld",mul(a,b+phi[m],m));
    84     else
    85         printf("%lld",mul(a,b,m));
    86     return 0;
    87 }
    88 /*
    89 2 12 8
    90 2 5 3
    91 */

    Advanced:

    学习 快速幂&龟速乘&快速乘

    https://blog.csdn.net/Cyan_rose/article/details/83065026

    ------------------------------------

    a/b%c

    b,c互质

    则a/b 与 a^[phi(c)-1] 模c的结果是一致的 [a^phi(c) mod c = 1]

    a/b%c=a^[phi(c)-1]%c

    对于任意情况:

    针对的a是特别大,b、c较小的情况

    a/b%c=(a%bc)/b

    证明:把a设为bc*x + b*y +z的形式 (x尽量大,然后是y尽量大,x,y,z>=0)

    =============================

    最后推荐:

    https://www.cnblogs.com/zwfymqz/p/6740325.html

    一些数论题目的模板

  • 相关阅读:
    信息安全系统设计与实现学习笔记1
    信息安全系统设计与实现学习笔记2
    《信息安全系统设计与实现学习笔记3》
    信息安全系统设计与实现学习笔记4
    SAP PP——常用函数
    ReentrantLock
    WPS图片工具 MrFlySand
    【记者团】团队合作 MrFlySand
    华为HCDA论证教程 MrFlySand
    Windowd server2016教程(详细) MrFlySand
  • 原文地址:https://www.cnblogs.com/cmyg/p/11236270.html
Copyright © 2020-2023  润新知