zoukankan      html  css  js  c++  java
  • 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;
    }
    
  • 相关阅读:
    Typora使用腾讯云图床
    2020年8月总结
    113 路径之和II
    103 二叉树的锯齿形层次遍历
    128 最长连续序列
    160 相交链表
    33 搜索旋转排序数组
    学习制作GitHub徽标
    105 从前序与中序遍历序列构造二叉树
    重新封装了layer.tips,自定义跟随弹窗
  • 原文地址:https://www.cnblogs.com/yezekun/p/3925765.html
Copyright © 2011-2022 走看看