poj 2773 happy 2006
2013-08-24 23:38
190 查看
这道题目看上去不难,但我一直想不懂为什么k会比m大```
我的第一感觉想试试gcd,不敢下手,题目意思还不完全懂;
看了看网上的题解,发现大部分都是用容斥原理做,这东西我还没学, = =!
后来明白题目意思了,也就清楚了```
题解:
欧几里德算法: 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互素的数
View Code
我的第一感觉想试试gcd,不敢下手,题目意思还不完全懂;
看了看网上的题解,发现大部分都是用容斥原理做,这东西我还没学, = =!
后来明白题目意思了,也就清楚了```
题解:
欧几里德算法: 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互素的数
#include<cstdio> using namespace std; int s[1000009]; int gcd(int a,int b) { return b==0?a:gcd(b,a%b); } int main() { int a,b; while(scanf("%d%d",&a,&b)!=EOF) { int j=0; for(int i=1;i<=a;i++) if(gcd(i,a)==1) s[++j]=i; if(b%j==0) printf("%d\n",a*(b/j-1)+s[j]); else printf("%d\n",a*(b/j)+s[b%j]); } return 0; }
View Code
相关文章推荐
- POJ - 2773 Happy 2006 (互素的一点性质)
- 【容斥原理】【poj 2773】Happy 2006
- POJ 2773 Happy 2006 [容斥原理]
- poj 2773 Happy 2006(求第k个与n互质的数)
- poj2773 Happy 2006
- POJ 2773 Happy 2006
- POJ 2773 HAPPY 2006
- POJ 2773 Happy 2006 【数论,容斥原理+二分】
- poj 2773 Happy 2006
- POJ 2773 Happy 2006(求第k个和m互素的数/欧拉函数)
- POJ 2773 Happy 2006 【数论,容斥原理+二分】
- POJ 2773 Happy 2006 数学题
- [二分+容斥原理] poj 2773 Happy 2006
- poj 2773 Happy 2006(容斥原理+二分)
- POJ-2773-Happy 2006 解题报告
- POJ_2773_happy_2006(欧拉公式)
- POJ 2773 Happy 2006(求第k个与m互素的数)
- poj 2773 Happy 2006(容斥+二分)
- poj 2773 Happy 2006
- POJ 2773 Happy 2006 二分+容斥(入门