Happy 2006
Time Limit: 3000MS   Memory Limit: 65536K
Total Submissions: 8359   Accepted: 2737

Description

Two positive integers are said to be relatively prime to each other if the Great Common Divisor (GCD) is 1. For instance, 1, 3, 5, 7, 9...are all relatively prime to 2006.

Now your job is easy: for the given integer m, find the K-th element which is relatively prime to m when these elements are sorted in ascending order.

Input

The input contains multiple test cases. For each test case, it contains two integers m (1 <= m <= 1000000), K (1 <= K <= 100000000).

Output

Output the K-th element in a single line.

Sample Input

2006 1
2006 2
2006 3

Sample Output

1
3
5

Source

 
 
这题,以前做的时候用欧几里得,枚举,2300ms,这次用现在的思路,欧拉来做500ms。
 
 /*
题意:求第几个与N互素的数字。
周期性问题。
举例。
5的互素有:1.2,3,4
很明显:
第一个互素是1
第二个是 2
......
第五个是 6=5+1;
第六个是 8=6+2;
这里就存在着周期T.
1.需要注意对%==0 的时候的讨论。
2.M的值可以为1.要特判。否则对后面的/法,有影响,会RE的。
3.基本的思路也很简单,求出N的欧拉值,那么T就求出来了,然后
求出它的素数因子,扫一遍,找到余数的那个互素数。
*/ #include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
using namespace std; int opl[];
int s[];
int prime[],len;
int f[],flen; void make_prime()//素数打表
{
int i,j;
len=;
for(i=;i<=;i++)
if(s[i]==false)
{
prime[++len]=i;
for(j=i*;j<=;j=j+i)
s[j]=true;
}
} void make_Euler()//欧拉函数[1,1000000]全部打表。
{
int i,j;
make_prime();
for(i=;i<=;i++)
opl[i]=i;
opl[]=;
for(i=;i<=len;i++)
for(j=prime[i];j<=;j=j+prime[i])
opl[j]=opl[j]/prime[i]*(prime[i]-);
} void make_dEuler(int n)//素因子装在f[]
{
int i;
flen=;
for(i=;i*i<=n;i++)
if(n%i==)
{
while(n%i==)
n=n/i;
f[++flen]=i;
}
if(n!=)
f[++flen]=n;
} int make_ini(int n,int k1)
{
int i,j;
int num=;
make_dEuler(n);
memset(s,false,sizeof(s));
for(i=;i<=flen;i++)
for(j=f[i];j<=n;j=j+f[i])
s[j]=true;
for(i=;i<=n;i++)
if(s[i]==false)
{
num++;
if(num==k1)
return i;
}
} int main()
{
int n,m,sum,k,k1,T;
make_Euler();
while(scanf("%d%d",&n,&m)>)
{
if(n==)//特判
{
printf("%d\n",m);
continue;
}
sum=;
T=opl[n];
if(m%T==)//!!~
{
sum=sum+n*((m-)/T);
sum=sum+make_ini(n,T);
}
else
{
sum=sum+n*(m/T);
sum=sum+make_ini(n,m%T);
}
printf("%d\n",sum);
}
return ;
}

POJ 2773 Happy 2006------欧几里得 or 欧拉函数。的更多相关文章

  1. 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 ...

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

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

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

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

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

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

  5. POJ 2773 Happy 2006 数学题

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

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

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

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

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

  8. poj 2773 Happy 2006

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

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

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

  10. 欧几里得&扩展欧几里得

    原博网址:http://www.cnblogs.com/frog112111/archive/2012/08/19/2646012.html 欧几里德算法 欧几里德算法又称辗转相除法,用于计算两个整数 ...

随机推荐

  1. 将tomcat添加到服务中

    转载自:http://blog.csdn.net/zjd934784273/article/details/47701011(windows) :http://www.cnblogs.com/ilah ...

  2. IAP远程在线升级

    IAP远程在线升级 在上一篇中实现了LWIP网口通讯,那么肯定要加个在线升级功能,这个功能所占用的资源很少,但在物联网中很重要也很实用.在线升级就是像手机一样,先下载好系统,然后点击升级~然后就没然后 ...

  3. Binary Search-483. Smallest Good Base

    For an integer n, we call k>=2 a good base of n, if all digits of n base k are 1. Now given a str ...

  4. css基础小总结

    header{font-size:1em;padding-top:1.5em;padding-bottom:1.5em} .markdown-body{overflow:hidden} .markdo ...

  5. html5 页面基本骨架

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...

  6. apt小问题

    安装软件遇到情况,一直等待: root@test-xxx:/opt# apt-get install vsftpdReading package lists... DoneBuilding depen ...

  7. Tomcat启动内存设置

    Tomcat启动内存设置 Tomcat的启动分为startupo.bat启动和注册为windows服务的启动,下面一一说明. 1.startup.bat启动 在tomcat_home/bin目录下找到 ...

  8. Windows下安装MySQL详细教程

    Windows下安装MySQL详细教程 1.安装包下载  2.安装教程 (1)配置环境变量 (2)生成data文件 (3)安装MySQL (4)启动服务 (5)登录MySQL (6)查询用户密码 (7 ...

  9. Linux Cluster环境下批量分发执行补丁

    转自:http://blog.csdn.net/napolunyishi/article/details/18219867 这两天做了一个需求,因为上一个版本的/tmp空间默认只分配了5G,而升级程序 ...

  10. 在MVC过滤器中获取触发的Controller、Action、参数 等

    首先是实现接口System.Web.Mvc.IActionFilter的过滤器 获取Controller.Action.参数 方法一. string actionName = filterContex ...