poj 2773欧几里得的应用
2017-05-23 15:14
120 查看
题目大意就是给出n和k求出第k个与n互素的数
如果知道欧几里德算法的话就应该知道gcd(b×t+a,b)=gcd(a,b) (t为任意整数)
则如果a与b互素,则b×t+a与b也一定互素,如果a与b不互素,则b×t+a与b也一定不互素
故与m互素的数对m取模具有周期性,则根据这个方法我们就可以很快的求出第k个与m互素的数
假设小于m的数且与m互素的数有k个,其中第i个是ai,则第m×k+i与m互素的数是k×m+ai
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<vector>
#include<algorithm>
#include<map>
using namespace std;
const int maxn = 1000000 + 100;
#define INF 0x3f3f3f3f
#define clr(x,y) memset(x,y,sizeof x )
typedef long long ll;
#define eps 10e-10
const int Mod = 1000000007;
typedef pair<ll, ll> P;
int gcd(int x,int y)
{
return y ? gcd(y,x % y) : x;
}
int ps[maxn];
int main()
{
int n,k;
while( ~ scanf("%d%d",&n,&k))
{
int len = 0;
for(int i = 1; i <= n; i ++)
{
if(gcd(n,i) == 1)
ps[len ++] = i;
}
if(k <= len)
{
printf("%d\n",ps[k - 1]);
continue;
}
int t = k / len,ts = k % len;
printf("%d\n",ts ? (t * n + ps[ts - 1]) : ((t - 1) * n + ps[len - 1]));
}
return 0;
}
如果知道欧几里德算法的话就应该知道gcd(b×t+a,b)=gcd(a,b) (t为任意整数)
则如果a与b互素,则b×t+a与b也一定互素,如果a与b不互素,则b×t+a与b也一定不互素
故与m互素的数对m取模具有周期性,则根据这个方法我们就可以很快的求出第k个与m互素的数
假设小于m的数且与m互素的数有k个,其中第i个是ai,则第m×k+i与m互素的数是k×m+ai
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<vector>
#include<algorithm>
#include<map>
using namespace std;
const int maxn = 1000000 + 100;
#define INF 0x3f3f3f3f
#define clr(x,y) memset(x,y,sizeof x )
typedef long long ll;
#define eps 10e-10
const int Mod = 1000000007;
typedef pair<ll, ll> P;
int gcd(int x,int y)
{
return y ? gcd(y,x % y) : x;
}
int ps[maxn];
int main()
{
int n,k;
while( ~ scanf("%d%d",&n,&k))
{
int len = 0;
for(int i = 1; i <= n; i ++)
{
if(gcd(n,i) == 1)
ps[len ++] = i;
}
if(k <= len)
{
printf("%d\n",ps[k - 1]);
continue;
}
int t = k / len,ts = k % len;
printf("%d\n",ts ? (t * n + ps[ts - 1]) : ((t - 1) * n + ps[len - 1]));
}
return 0;
}
相关文章推荐
- poj 2773 欧几里得 一个拓展应用
- POJ 2773 Happy 2006------欧几里得 or 欧拉函数。
- poj 1601 青蛙的约会 扩展欧几里得定理应用
- POJ 2773 Happy 2006 欧拉函数的应用
- poj 1901 跳蚤 扩展欧几里得定理和容斥原理的应用
- POJ 2773 Happy 2006 (分解质因数+容斥+二分 或 欧几里德算法应用)
- Happy 2006 - POJ 2773 欧几里得
- POJ 2773 欧几里得
- (Relax 1.15)POJ 2773 Happy 2006(欧拉函数的应用:求与n互质的第k个数)
- [POJ1845&POJ1061]扩展欧几里得应用两例
- POJ-2773 欧几里得 + 二分 + 容斥
- POJ 2115 C Looooops(扩展欧几里得应用)
- poj--1061青蛙的约会(扩展欧几里得公式的应用)
- poj 2773 Happy 2006(欧拉函数应用)
- POJ 2115 C Looooops(扩展欧几里得应用)
- zoj 1700 || poj 1577 Falling Leaves(BST应用)
- POJ 2960 S-Nim【SG函数的应用】
- POJ 1828 选猴王 排序qsort应用
- 2773 Happy 2006 //欧拉函数的应用
- POJ 1847 Dijkstra应用