博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
欧拉函数 / 蒙哥马利快速幂 / 容斥
阅读量:4974 次
发布时间:2019-06-12

本文共 1304 字,大约阅读时间需要 4 分钟。

一:知识点

欧拉函数的定义:

    在数论中,对于正整数N,少于或等于N ([1,N]),且与N互质(即gcd为1)的正整数(包括1)的个数,记作φ(n)。

      

欧拉函数的延伸:

  小于或等于n的数中,与n互质的数的总和为:φ(x) * x / 2  (n>1)。

(如果mod是质数,那么φ(mod)= mod-1)

欧拉函数φ(x)模板:

ll Euler(int n)//即求φ(x){    ll ret=n;    for(int i=2;i<=sqrt(n);i++)     if(n%i==0)      {        ret=ret/i*(i-1);//先进行除法防止溢出(ret=ret*(1-1/p(i)))        while(n%i==0)          n/=i;     }    if(n>1)          ret=ret/n*(n-1);        return ret;}

  蒙哥马利(Montgomery)幂模运算是快速计算a^b%k的一种算法,是RSA加密算法的核心之一。

算法模板:

ll Montgomery(ll base,ll exp){    ll res = 1;    while(exp)    {        if ( exp&1 )            res = (res*base) % mod;        exp >>= 1;        base = (base*base) % mod;    }    return res;}

:()

  实用:若gcd(n,i) == 1,那么gcd(n,n-i)==1

/*************************************************************************************************************************************/

二:牛客例题:

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld

题目描述 

小a和小b来到了一条布满了黄金的街道上。它们想要带几块黄金回去,然而这里的城管担心他们拿走的太多,于是要求小a和小b通过做一个游戏来决定最后得到的黄金的数量。
游戏规则是这样的:
假设道路长度为
n米(左端点为0,右端点为n),同时给出一个数k(下面会提到k的用法)
设小a初始时的黄金数量为A,小b初始时的黄金数量为B
小a从1出发走向n1,小b从n−1出发走向1,两人的速度均为1m/s
假设某一时刻(必须为整数)小a的位置为x,小b的位置为y,若gcd(n,x)=1gcd(n,y)=1,那么小a的黄金数量A会变为Ak^x(kg),小b的黄金数量B会变为Bk^y(kg)
当小a到达n1时游戏结束
小a想知道在游戏结束时A

转载于:https://www.cnblogs.com/liuyongliu/p/10305877.html

你可能感兴趣的文章
转载:深入浅出Zookeeper
查看>>
GMA Round 1 新程序
查看>>
node anyproxy ssi简易支持
查看>>
编译预处理指令:文件包含指令、宏定义指令、条件编译指令
查看>>
PHP函数 ------ ctype_alnum
查看>>
网站安全
查看>>
WS-Addressing 初探
查看>>
.NET+模块编排+数据库操作类的封装+分层架构+实体类+Ajax.net+Athem.NET+javascript+Activex组件+用户权限等...
查看>>
Markdown不常见功能
查看>>
(二)NUnit单元测试心得
查看>>
hdu_2604Queuing(快速幂矩阵)
查看>>
frame.bounds和center
查看>>
HDU 1102 Constructing Roads
查看>>
android StaticLayout参数解释
查看>>
多线程之ThreadLocal类
查看>>
Qt-读取文本导出word
查看>>
OC语言description方法和sel
查看>>
C#中得到程序当前工作目录和执行目录的五种方法
查看>>
扫描线与悬线
查看>>
用队列和链表的方式解决约瑟夫问题
查看>>