题意

给你ddd和kkk
询问gcd((a+d)k−ak)gcd((a+d)^k-a^k)gcd((a+d)k−ak) 其中aaa为任意取值
ddd和kkk均为10^100

题解

看题目形式,显然是一个代码非常简短的数论题
不知道为啥过了一片,可能我们队伍的数论水平低于平均水平吧

首先先展开一下
(a+d)k−ak=∑i=1kCkidiak−i(a+d)^k-a^k=\sum_{i=1}^kC_k^id^{i}a^{k-i}(a+d)k−ak=i=1∑k​Cki​diak−i
先对每一种质数ppp分开考虑
考虑到,如果aaa也拥有ppp的话,答案在大多数情况都会变大,这对我们取gcd是不优的
故先考虑aaa不包含ppp的情况
先引入kummer定理

CmnC_m^nCmn​中含有p的指数次数为m-n在p进制下的退位个数
即m-n在p进制下的退位个数为t,则有pt∣Cmnp^{t}| C_m^npt∣Cmn​

不放先设d=d′∗pA,k=k′∗pBd=d'*p^A,k=k'*p^Bd=d′∗pA,k=k′∗pB
如果A=0A=0A=0显然就不用考虑这个质数了
对于一个iii来说,包含ppp的次幂为
t=Ai+B−f(i,p)t=Ai+B-f(i,p)t=Ai+B−f(i,p),其中f(i,p)f(i,p)f(i,p)为ppp在iii中的次幂
稍微解释一下B−f(i,p)B-f(i,p)B−f(i,p),这个等式至少在f(i,p)<Bf(i,p)<Bf(i,p)<B即i<pBi<p^Bi<pB时成立,在后文可以知道最小值仅需讨论这一范围就可以了
此时可以发现AiAiAi随着iii增加每次最少会增加A≥1A≥1A≥1,而f(i,p)f(i,p)f(i,p)的增量是不会超过111的
故ttt至少是单调不降的
i=1i=1i=1时t=A+Bt=A+Bt=A+B
i=2i=2i=2时t=2A+B−f(i,p)t=2A+B-f(i,p)t=2A+B−f(i,p)
故A>1A>1A>1时,i=1i=1i=1时ttt时唯一最小的,也就是p的贡献就是pA+Bp^{A+B}pA+B了
但当A=1A=1A=1时,如果f(2,p)=1f(2,p)=1f(2,p)=1,那么i=1i=1i=1和i=2i=2i=2的次数是一样的,也就是两项会合并
这种情况当且仅当p=2p=2p=2
合并之后贡献即为2∗pA+B2*p^{A+B}2∗pA+B,也就是此时答案要乘222
稍微验证一下,i=3i=3i=3是不可能和i=1,i=1i=1,i=1i=1,i=1同时相同的
但同时你会发现,若k=2k=2k=2,aaa此时就有用了,因为在i=2i=2i=2时,aaa的系数为000,故我们可以通过调整aaa是的两项的ppp的指数发生改变而不能合并,此时答案将会变小

故对于k=2k=2k=2的情况分开讨论即可

接下来,接下来的答案即为d出现过的质因子在k中出现的次数*d
这一步用一个简单的gcd就可以了

时间复杂度O(log2(k))O(log^2(k))O(log2(k))

高精度用python解决即可

def gcd (a,b):while (a!=0):t=b%ab=aa=treturn bd,k=list(map(int,input().split()))
if (k==2):print(d*(2-d%2))
else:ans=1while (1):now=gcd(k,d)if (now==1): breakk=k//nowans=ans*nowif (d%4==2): ans*=2print(ans*d)

gym103261 I. Euclid‘s Algorithm相关推荐

  1. 欧几里得  拓展欧几里得算法 讲解 (Euclid Extend- Euclid Algorithm)

    欧几里得& 拓展欧几里得(Euclid & Extend-Euclid) 欧几里得算法(Euclid) 背景: 欧几里德算法又称辗转相除法,用于计算两个正整数a,b的最大公约数.   ...

  2. C语言求最大公约数欧几里得Euclid算法(附完整源码)

    最大公约数欧几里得Euclid算法 最大公约数欧几里得Euclid算法完整源码(定义,实现,main函数测试) 最大公约数欧几里得Euclid算法完整源码(定义,实现,main函数测试) #inclu ...

  3. Algorithm(算法

    作者:starfish starfish@vip.sina.com 算法是在有限步骤内求解某一问题所使用的一组定义明确的规则.通俗点说,就是计算机解题的过程.在这个过程中,无论是形成解题思路还是编写程 ...

  4. 编译器架构Compiler Architecture(上)

    编译器架构Compiler Architecture(上) 编译器是程序,通常是非常大的程序.它们几乎都有一个基于翻译分析综合模型的结构. CONTENTS Overview • Compiler C ...

  5. 余数定理_如何用Java实现余数定理

    余数定理 by Anuj Pahade 由Anuj Pahade 如何用Java实现余数定理 (How to implement the Chinese Remainder Theorem in Ja ...

  6. 用Latex写IEEE论文

    如果在搞科研,想在IEEE上发表文章,那么就不得不用IEEE的论文模板,分为doc版本和Tex版本.Tex是高德纳·纳什所写,大牛级的任务,写过<计算机程序设计艺术>,曾经是美国最年轻的科 ...

  7. python写接口自动化需要rsa加密_RSA加密,请问如何用Python实现该加密过程

    展开全部 ^import random def gcd(a, b): while b != 0: a, b = b, a % b return a def multiplicative_inverse ...

  8. Licia:最全最实用的 JavaScript 工具库

    前言 在业务开发过程中,我们经常会重复使用日期格式化.cookie 操作.模板.浏览器判断.类型判断等功能.为了避免不同项目之间进行复制粘贴,可以将这些常用的函数封装到一起并发布 npm 包.在将近三 ...

  9. 一些有意思的算法代码[转载]

    转载自:http://coolshell.cn/articles/6010.html Keith Schwarz是一个斯坦福大学计算机科学系的讲师.他对编程充满了热情.他的主页上他自己正在实现各种各样 ...

  10. 每个程序员都应该知道的基础数论

    这篇文章讨论了数论中每个程序员都应该知道的几个重要概念.本文的内容既不是对数论的入门介绍,也不是针对数论中任何特定算法的讨论,而只是想要做为数论的一篇参考.如果读者想要获取关于数论的更多细节,文中也提 ...

最新文章

  1. matlab神经网络工具箱函数汇总
  2. python代码案例详解-我用Python抓取了7000 多本电子书案例详解
  3. LiveBins缔造者
  4. 这样实现分布式锁,才叫优雅!
  5. 计算机视觉 | Python OpenCV 3 使用背景减除进行目标检测
  6. Oracle入门《Oracle介绍》第一章1-4 Oracle 用户管理
  7. #includeiostream与#includeiostream.h的区别
  8. windows【提权系列】— CVE-2016-7255
  9. LeetCode每日一题——无重复字符的最长子串
  10. Java 设计模式 之 单例模式(Singleton)
  11. mgr未同步 mysql_MySQL MGR--数据同步原理
  12. 2020年毕业生腾讯校园招聘提前批——后台开发——面试经验——分享给大家交流经验。
  13. 数据分析tableau 和 python的区别_数据分析师综述篇
  14. 新概念,数字游民面临的一些挑战和应对举措
  15. java 判断用户名_java如何判断用户名和密码
  16. canal.admin、adapter和deployer的区别
  17. 谁是全球芯片行业的“麒麟才子”?得之可得天下!
  18. Android项目开发如何设计整体架构?大牛最佳总结
  19. 电脑上最好的5个epub阅读器
  20. 无心剑中译伊丽莎白·毕肖普《一门技艺》

热门文章

  1. Linux对文本查找、检索、统计及替换的常用命令
  2. JS格式化数字保留小数点
  3. 关于2012(世界末日)
  4. 【NLP】自然语言处理的语料库与词库
  5. [轻笔记]Juliav0.6配置jupyter
  6. 苹果手机开机一会显示无服务器,苹果手机出现无信号的解决方法
  7. 如何判断微信付款码和支付宝付款码
  8. 江湖救急笔记——计算机网络
  9. 叶酸修饰四氧化三铁纳米颗粒(FA-Fe3O4)|Cys-Fe3O4/CuS@BSA|巯基修饰的四氧化三铁磁性纳米颗粒齐岳供应
  10. UI设计师平时都用什么设计软件工具?