List Of Integers

List Of Integers

https://ac.nowcoder.com/acm/problem/112558

题意:给你x、p、k三个数,让你求大于x的第k个与p互素的数?

思路:求出p的质因子,然后求小于等于x的与p互质的个数求出为j,题意就相当于求大于0的第k+j个与p互素的数了,二分枚举答案,求小于等于某一个数与p互质的个数使用容斥原理计算得出。

代码:

#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<algorithm>
#include<cmath>

#define inf 1000000007

using namespace std;

typedef long long ll;

int x, p, k;

int prime[1000005], ji=0, shu[105], jj=1;
int pa[1000005];

int Solve(int x,int a,int type)
{
    if(a==jj)
    {
        return x * type;
    }
    else
    {
        return Solve(x,a+1,type) + Solve(x/shu[a],a+1,type * -1);
    }
}


int main()
{
    int t;
    scanf("%d",&t);
    pa[0]=pa[1]=1;
    for(int i=2; i*i<=1000000; i++)
    {
        if(!pa[i])
        {
            prime[ji++]=i;
            for(int j=i*i; j<=1000000; j=j+i)
            {
                pa[j]=1;
            }
        }
    }
    for(int i=1000;;i++)
    {
        if(!pa[i])
        {
            prime[ji++]=i;
            break;
        }
    }
    while(t--)
    {
        jj=1;
        scanf("%d%d%d",&x,&p,&k);
        for(int i=0; prime[i]*prime[i]<=p; i++)
        {
            int flag=1;
            while(p%prime[i]==0)
            {
                if(flag)
                {
                    flag=0;
                    shu[jj++]=prime[i];
                }
                p=p/prime[i];
            }
        }
        if(p>1)
        shu[jj++]=p;
        if(p==1&&jj==0)
        {
            printf("%d\n",x+k);
            continue;
        }
        k=k+Solve(x,1,1);
        int l=x, r=1000000005;
        while(r-l>1)
        {
            int mid=(l+r)/2;
            if(Solve(mid,1,1)>=k)
            {
                r=mid;
            }
            else
            {
                l=mid;
            }
        }
        cout << r << endl;
    }
    return 0;
}
全部评论

相关推荐

07-29 14:46
门头沟学院 Java
码农索隆:好了,我说句公道话,咱三都辛苦了
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-30 11:29
点赞 评论 收藏
分享
醉蟀:你不干有的是人干
点赞 评论 收藏
分享
仁者伍敌:牛子这些人还会点一个自动回复,boss都不带回复的
点赞 评论 收藏
分享
07-28 16:10
门头沟学院 Java
连笔试都没有就直接挂了&nbsp;这是学历厂吗两段大厂实习一段中厂一点机会都没有吗真的很难绷
xiaolihuam...:校招挂了,然后反手给我捞了个社招
投递虾皮信息等公司7个岗位
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务