• BOJ 2773 第K个与m互质的数


    算法是关键,得出1-m内的互质数,然后类推计算即可。下面有详细说明。

    #include<iostream>
    #include<cstring>
    using namespace std;
    int a[1000001];int p[1000000];   //用a来筛去m的唯一分解后的质因子及其倍数。
    int main()
    {
        int m,k;
        while(cin>>m>>k)
        {
            memset(a,0,sizeof(a));
            memset(p,0,sizeof(p));
            int mm=m;
            for(int i=2;i<=mm;i++)     //此处mm即可
             {
                 if(mm%i==0)
                 {
                    for(int j=i;j<=m;j+=i)  //筛去
                      a[j]=1;
                    while(mm%i==0)mm/=i;    //除掉
                 }
             }
             int t=1;      //t记录有多少个,
             for(int i=1;i<=m;i++)
             {
                 if(a[i]==0)p[t++]=i;        //p[i]记录第i个互质数(1--m)
             }
             t--;                           //1--m内有t个,那么m--2m,2m--3m....必然也有t个!每层相差m。
             if(k%t==0)cout<<p[t]+m*(k/t-1)<<endl;//考虑特殊位子。
             else cout<<m*(k/t)+p[k%t]<<endl;
        }
        return 0;
    }
    
  • 相关阅读:
    CentOS7.4安装Docker
    责任链模式
    策略模式
    状态模式
    解释器模式
    备忘录模式
    中介者模式
    观察者模式
    迭代器模式
    private、default、protected和public的作用域
  • 原文地址:https://www.cnblogs.com/yezekun/p/3925765.html
Copyright © 2020-2023  润新知