【jzoj4868】【Simple】【数论】

来源:互联网 发布:店铺优化是什么意思 编辑:程序博客网 时间:2024/06/11 11:03

题目大意

这里写图片描述

解题思路

最暴力的方法就是枚举x,就可以算出有多少种y,然而这会重复。发现这题的性质,就是扩展gcd,对于一个c若只有一个合法x就不会重复,相邻两个x间隔m/gcd(n,m),所以只要x在[0,m/gcd(n,m)-1]内就不会有重复。

code

#include<set>#include<cmath>#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#define LL long long#define LD double#define max(a,b) ((a>b)?a:b)#define min(a,b) ((a>b)?b:a)#define fo(i,j,k) for(LL i=j;i<=k;i++)#define fd(i,j,k) for(LL i=j;i>=k;i--)using namespace std;LL const inf=1e9;LL const maxn=300,maxm=1e5;LL t,n,m,q;LL gcd(LL x,LL y){    for(;x%y;){        LL z=x%y;        x=y;        y=z;    }    return y;}int main(){    freopen("simple.in","r",stdin);    freopen("simple.out","w",stdout);    scanf("%lld",&t);    fo(cas,1,t){        scanf("%lld%lld%lld",&m,&n,&q);        LL ans=0,gc=gcd(n,m),mx=min(m/gc-1,q/n);        fo(x,0,mx)            ans+=(q-n*x)/m+1;        printf("%lld\n",q-(ans-1));    }    return 0;}
0 0
原创粉丝点击