zoukankan      html  css  js  c++  java
  • poj 2773 happy 2006

    这道题目看上去不难,但我一直想不懂为什么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互素的数

     1 #include<cstdio>
     2 using namespace std;
     3 int s[1000009];
     4 int gcd(int a,int b)
     5 {
     6     return b==0?a:gcd(b,a%b);
     7 }
     8 int main()
     9 {
    10     int a,b;
    11     while(scanf("%d%d",&a,&b)!=EOF)
    12     {
    13         int j=0;
    14         for(int i=1;i<=a;i++)
    15             if(gcd(i,a)==1)
    16                 s[++j]=i;
    17         if(b%j==0)
    18             printf("%d
    ",a*(b/j-1)+s[j]);
    19         else printf("%d
    ",a*(b/j)+s[b%j]);
    20     }
    21     return 0;
    22 }
    View Code
  • 相关阅读:
    屏幕适配的简单介绍
    静态单元格
    BOOL的getter方法
    取消注册监听器
    自定义cell
    假适配
    cell的重用
    UITableView的简单使用
    UISrcoll控件简单介绍
    创建ios界面的三步骤
  • 原文地址:https://www.cnblogs.com/yours1103/p/3280179.html
Copyright © 2011-2022 走看看