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;
}

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

POJ-2773 Happy 2006,暴力2700ms+水过!的更多相关文章

  1. poj 2773 Happy 2006 - 二分答案 - 容斥原理

    Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 11161   Accepted: 3893 Description Two ...

  2. POJ 2773 Happy 2006 数学题

    题目地址:http://poj.org/problem?id=2773 因为k可能大于m,利用gcd(m+k,m)=gcd(k,m)=gcd(m,k)的性质,最后可以转化为计算在[1,m]范围内的个数 ...

  3. POJ 2773 Happy 2006#素数筛选+容斥原理+二分

    http://poj.org/problem?id=2773 说实话这道题..一点都不Happy好吗 似乎还可以用欧拉函数来解这道题,但正好刚学了容斥原理和二分,就用这个解法吧. 题解:要求输出[1, ...

  4. [poj 2773] Happy 2006 解题报告 (二分答案+容斥原理)

    题目链接:http://poj.org/problem?id=2773 题目大意: 给出两个数m,k,要求求出从1开始与m互质的第k个数 题解: #include<algorithm> # ...

  5. POJ 2773 Happy 2006(容斥原理+二分)

    Happy 2006 Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 10827   Accepted: 3764 Descr ...

  6. POJ 2773 Happy 2006【GCD/欧拉函数】

    根据欧几里德算法,gcd(a,b)=gcd(a+b*t,b) 如果a和b互质,则a+b*t和b也互质,即与a互质的数对a取模具有周期性. 所以只要求出小于n且与n互质的元素即可. #include&l ...

  7. poj 2773 Happy 2006

    // 题意 :给你两个数 m(10^6),k(10^8) 求第k个和m互质的数是什么这题主要需要知道这样的结论gcd(x,n)=1 <==> gcd(x+n,n)=1证明 假设 gcd(x ...

  8. poj 2773 Happy 2006 容斥原理+二分

    题目链接 容斥原理求第k个与n互质的数. #include <iostream> #include <vector> #include <cstdio> #incl ...

  9. POJ 2773 Happy 2006(欧几里德算法)

    题意:给出一个数m,让我们找到第k个与m互质的数. 方法:这题有两种方法,一种是欧拉函数+容斥原理,但代码量较大,另一种办法是欧几里德算法,比较容易理解,但是效率很低. 我这里使用欧几里德算法,欧几里 ...

随机推荐

  1. yum卸载遇到的问题--待解决

    系统版本是 [root@master ~]# uname -a Linux master -.el6.x86_64 # SMP Sun Nov :: EST x86_64 x86_64 x86_64 ...

  2. C#基础学习3

    运算符,表达式!

  3. 新手玩CSS中的一些黑科技

    哎哎 1.鼠标移进网页里,不见了= = *{ cursor: none!important; } 2.简单的文字模糊效果 *{ color: transparent; text-shadow: #11 ...

  4. 如何创建你的第一个手机APP?

    本文使用helloworld来作为android的入门项目,通过这个最简单的项目来帮助大家了解android程序开发包含哪些部分,以及如何运行android程序,本次开发android程序的工具是ec ...

  5. 如何用sql server数据库恢复.bak数据库备份

    @hcy(黄灿奕) 之前有两次都恢复不了,折腾了很长时间,这一次碰到这样的问题,居然又忘了,又捣鼓了很长时间,现在记下来 1.右击SQL Server 2008实例下的“数据库”文件夹.就是与安全性. ...

  6. 洛谷 P2515 [HAOI2010]软件安装

    题目描述 现在我们的手头有N个软件,对于一个软件i,它要占用Wi的磁盘空间,它的价值为Vi.我们希望从中选择一些软件安装到一台磁盘容量为M计算机上,使得这些软件的价值尽可能大(即Vi的和最大). 但是 ...

  7. Devops 技术图谱

  8. About the iOS File System

    两个维度: 1)是否给用户使用: 2)是否持久存储. During installation of a new app, the installer creates a number of conta ...

  9. Unity3D 在自定义脚本中实现Button组件上的OnClick面板

    下述内容不对c#语法做过多讲解,仅对已入门并有兴趣的同学做为学习和拓展的资料 大家在Unity制作的过程中一定都使用过UI功能,那么很多人也一定见过这个面板: 那么我们如何能在自己的脚本中添加上像On ...

  10. docker 容器的网络

    容器的网络模式 bridge -net=bridge 默认网络.docker启动后创建一个docker0网桥,默认创建的容器也添加到这个网桥 [root@localhost ~]# ip a 1: l ...