POJ2773 - Happy 2006(欧拉函数)
题目大意
给定两个数m,k,要求你求出第k个和m互质的数
题解
我们需要知道一个等式,gcd(a,b)=gcd(a+t*b,b)
证明如下:gcd(a+t*b,b)=gcd(b,(a+t*b)%b)=gcd(b,a%b)=gcd(a,b)
所以区间[1,m-1]与m互质的个数等于区间[1+t*m,(t+1)*m-1]与m互质的个数,即都等于phi(m),那么答案就等于第k%phi(m)个与m互素的值p+m*(k/phi(m))
代码:
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
using namespace std;
typedef long long LL;
#define MAXN 1000000
int check[MAXN+5];
int euler_phi(int n)
{
int m=(int)sqrt(n+0.5);
int ans=n,k=n;
memset(check,false,sizeof(check));
for(int i=2; i<=m; i++)
if(n%i==0)
{
ans=ans/i*(i-1);
for(int j=1; i*j<=k; j++)
check[i*j]=true;
while(n%i==0)n/=i;
}
if(n>1)
{
ans=ans/n*(n-1);
for(int j=1; n*j<=k; j++)
check[n*j]=true;
}
return ans;
}
int main(void)
{
int m,k,ans,cnt,t,i;
while(cin>>m>>k)
{
ans=euler_phi(m);
cnt=0;
if(k%ans==0)
t=k/ans-1;
else
t=k/ans;
k=k-ans*t;
for(i=1; i<=m; i++)
{
if(!check[i])
cnt++;
if(cnt==k) break;
}
cout<<i+m*t<<endl;
}
return 0;
}
POJ2773 - Happy 2006(欧拉函数)的更多相关文章
- 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 ...
- 数论 - 欧拉函数的运用 --- poj 3090 : Visible Lattice Points
Visible Lattice Points Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 5636 Accepted: ...
- POJ3090(SummerTrainingDay04-M 欧拉函数)
Visible Lattice Points Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7450 Accepted: ...
- POJ 2773 Happy 2006------欧几里得 or 欧拉函数。
Happy 2006 Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 8359 Accepted: 2737 Descri ...
- hdu2588 GCD (欧拉函数)
GCD 题意:输入N,M(2<=N<=1000000000, 1<=M<=N), 设1<=X<=N,求使gcd(X,N)>=M的X的个数. (文末有题) 知 ...
- BZOJ 2705: [SDOI2012]Longge的问题 [欧拉函数]
2705: [SDOI2012]Longge的问题 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 2553 Solved: 1565[Submit][ ...
- BZOJ 2818: Gcd [欧拉函数 质数 线性筛]【学习笔记】
2818: Gcd Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 4436 Solved: 1957[Submit][Status][Discuss ...
- COGS2531. [HZOI 2016]函数的美 打表+欧拉函数
题目:http://cogs.pw/cogs/problem/problem.php?pid=2533 这道题考察打表观察规律. 发现对f的定义实际是递归式的 f(n,k) = f(0,f(n-1,k ...
- poj2478 Farey Sequence (欧拉函数)
Farey Sequence 题意:给定一个数n,求在[1,n]这个范围内两两互质的数的个数.(转化为给定一个数n,比n小且与n互质的数的个数) 知识点: 欧拉函数: 普通求法: int Euler( ...
随机推荐
- 如何做到 jQuery-free?
一.选取DOM元素 jQuery的核心是通过各种选择器,选中DOM元素,可以用querySelectorAll方法模拟这个功能. var $ = document.querySelectorAll.b ...
- 【重构】m站重构思路
不重构全部模块,只对以下内容做基础重构就可以,第三方方式 1.验证码作为独立的服务,用户写入验证码获得id,服务端获取验证码id对应内容(根据时间和存储空间 清理验证码) 2.支付接口h5环境独立配置 ...
- SLua
安装 1.下载最新版,将Assets目录里的所有内容复制到工程中,对于最终产品,可以删除例子,文档等内容,如果是开发阶段则无所谓. 2.等待unity编译完毕,如果一切顺利的话,将出现SLua菜单,点 ...
- C#中如何按字节数截取字符串?
http://www.cnblogs.com/xuejie/archive/2012/12/14/2818452.html
- 批量将MP4 转换为 MP3
0 需要先下载VLC 软件 1 win+R 运行 "CMD" 2 CD mp4目录 3 复制 并运行下面代码 for %%a in (*.mp4) do "C:\Prog ...
- html5判断用户摇晃了手机(转)
先来看下html5的这几个特性: 1.deviceOrientation:方向传感器数据的事件,通过监听该事件可以获取手机静态状态下的方向数据: 2.deviceMotion: 运动传感器数据事件,通 ...
- Form – 保存自動關閉當前窗口
FAQ: 在BUTTON的触发器中,写如下代码, commit_form; go_bloack('你想显示的那个window的block'); --或者写 show_view('你要显示的canvas ...
- 机器学习&深度学习经典资料汇总,data.gov.uk大量公开数据
<Brief History of Machine Learning> 介绍:这是一篇介绍机器学习历史的文章,介绍很全面,从感知机.神经网络.决策树.SVM.Adaboost到随机森林.D ...
- bzoj1670
第一道凸包 采用Andrew算法,不论实现还是理解都非常简单 ..] of longint; i,j,k,m,n:longint; ans:double; procedure swap ...
- 分布式缓存BeIT Memcached简介
分布式缓存BeIT Memcached简介 或许你还没有用到过分布式缓存,在web集群的情况下,它可以很好的让一部分常用数据常驻服务器内存而不用担心各台web不同步.下面稍微介绍一下beitmemca ...