博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Happy 2006 POJ - 2773(欧几里得算法 互素问题)
阅读量:4557 次
发布时间:2019-06-08

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

Happy 2006 POJ - 2773

题目链接:

题目:

如果大公约数(GCD)为1,则两个正整数被认为是相对素数。例如,1,3,5,7,9 ......都是相对于2006年的素数。

     现在你的工作很简单:对于给定的整数m,当这些元素按升序排序时,找到相对于m的相对素数的第K个元素。
输入
     输入包含多个测试用例。 对于每个测试用例,它包含两个整数m(1 <= m <= 1000000),K(1 <= K <= 100000000)。
产量
     在单行中输出第K个元素。

Sample Input
2006 12006 22006 3
Sample Output
135 思路:由欧几里得算法得知:gcd(a,b)=gcd(a+b*t,b),故当k超过m时,后面的数与前面1~m中与m互质的数具有周期性, 即1~m中与m互质的数,加上m就是m~2m与m互质的数,所以只要求出1~m与m互质的数即可
//// Created by hanyu on 2019/8/9.//#include 
#include
#include
#include
#include
#include
#include
#include
using namespace std;typedef long long ll;const int maxn=3e6+7;int a[maxn];#define MAX 0x3f3f3f3fint Gcd(int x,int y){ if(y==0) return x; else return Gcd(y,x%y);}int main(){ int m,k; while(~scanf("%d%d",&m,&k)) { int pos=0; for(int i=1;i<=m;i++) { if(Gcd(i,m)==1) a[++pos]=i; }//1~m中所有与m互质的数,共有pos个 int num; int t=k/pos;//看是否满足一整个周期 int t1=k%pos;//在每个周期中的位置 if(t1==0)//整除则说明是一个周期中最后一个与m互质的数 num=(t-1)*m+a[pos];//每个周期中的每个数都要加m,故周期数-1乘m else num=t*m+a[t1]; printf("%d\n",num); } return 0;}

 

 

转载于:https://www.cnblogs.com/Vampire6/p/11329663.html

你可能感兴趣的文章
Java范例集锦(二)
查看>>
C语言变量和常量
查看>>
LInuxDay8——shell脚本编程基础
查看>>
topcoder 673
查看>>
Java中一些常用的类,包,接口
查看>>
下载特定区域内街景照片数据 | Download Street View Photos within Selected Region
查看>>
StarUML 破解方法
查看>>
C语言结构体
查看>>
[转]Tribon船体生产设计应用
查看>>
easy ui datagrid 让某行复选框不能选中
查看>>
第六周作业
查看>>
关于adb端口被占用的解决办法
查看>>
php 部分内置函数的使用
查看>>
字符串处理技巧
查看>>
归档及压缩命令
查看>>
Mybatis步骤
查看>>
WPF自定义控件之扩展原生控件
查看>>
《区块链100问》笔记整理——42~49问
查看>>
使用Jquery+EasyUI 进行框架项目开发案例讲解之二---用户管理源码分享
查看>>
深入理解计算机系统(1.4)---并发与并行、浅谈抽象
查看>>