Happy 2006

这个题很可能会超时的,但我几乎暴力的方法2700ms+过了,可能是后台水吧。开始没有什么思路,如果k小的话或许直接暴力可以,但k会比m都大,于是超过m的就不造怎么求了。。。看了讨论区某位大神的留言突然发现如果gcd(a,m)=1,那么gcd(a+km,m)=1也成立,这个用广义欧几里德即辗转相除法原理就可以明白了。

题意:就一句话,给定两个正整数m,k;求m的第k个互质数。

思路:我们可以发现小于m并且与m互质的数就构成了一个模m的简化剩余系,个数就是euler(m),那么这些数每个都加上m又会构成另一个简化剩余系。于是求第k个只需知道m的最小简化剩余系然后再加上m的倍数即可。

首先要把与m互质的数筛出来,那么就是1e6log(1e6),开始是想把素数先打个表看看能否优化些时间,后来把这部分去了,直接求一个数的简化剩余系也过了2922MS,好有趣。优化了一下又交了几发2782MS。注意1
1这组数据, 开始还re了两发。

const int N=1e6+10;
ll m,k,a[N];
void init(ll *a,int &len)//把小于m并且与m互质的数筛出来;
{
for(ll i=1; i<=m; i++)
int len=0;
if(__gcd(i,m)==1) a[++len]=i;
}
ll find()
{
if(x==0) return a[len]+(k-1)*m;
init(a,len);//len是个数;
ll x=k%len;
k/=len;
return a[x]+k*m;
}
int main()
{
while(~scanf("%I64d%I64d",&m,&k))//注意1 1这组数据
{
printf("%I64d\n",find());
}
return 0;
}

这里提到的简化剩余系在信安数学基础里的含义是:简化剩余系

最新文章

  1. 安卓ndk参考资料
  2. vs 下安装boost
  3. Volatile实现原理
  4. opencv 简单模糊和高斯模糊 cvSmooth
  5. js 日期按年月日加减
  6. Java的浮点数和整数的进制转换
  7. 深入学习:Windows下Git入门教程(上)
  8. bzoj1566
  9. HTML (1)href与Action,get post
  10. ASP.NET MVC实现剪切板功能
  11. 递归添加 另一个ds 里的DataRow 时 报错:该行已经属于另一个表。
  12. Python基础之模块、数据类型及数据类型转换
  13. 初探 ELK - 每天5分钟玩转 Docker 容器技术(89)
  14. java读取文件乱码
  15. C# 因缺少CategoryName,而未能初始化 的解决办法
  16. Oracle (分类、数据库类型、序列)
  17. 一个会学习(观察-&gt;活学-&gt;求变)的人,在任何领域都能变得强大无比
  18. 【洛谷5月月赛】玩游戏(NTT,生成函数)
  19. TWebBrowser禁止弹出Alert对话框
  20. [转]COPY OR MOVE FILES AND FOLDERS USING OLE AUTOMATION

热门文章

  1. mysql中迅速插入百万条测试数据的方法
  2. bash 变量传递方法
  3. RedHat改yum源免费使用CentOS源
  4. oracle常用数据类型&amp;约束条件(及案例)
  5. leetcode410 Split Array Largest Sum
  6. Junit测试集锦
  7. Java 利用FTP上传,下载文件,遍历文件目录
  8. python 网络编程篇
  9. mfc消息
  10. 环球影城母公司:务必阻止复仇者和 X 战警团聚