关闭

124人阅读 评论(0) 收藏 举报
分类:

这里写图片描述
前30暴力枚举,特判无解情况。
再20 L==R,变为解同余方程

#include <cstdio>
#include <iostream>
#define LL long long
using namespace std;
long long x,y;
long long gcd(long long a,long long b)
{
    if(!b) return a;
    return gcd(b,a%b);
}
LL e_gcd(LL a,LL b,LL &x,LL &y)  
{  
    if(b==0)  
    {  
        x=1;  
        y=0;  
        return a;  
    }  
    LL ans=e_gcd(b,a%b,x,y);  
    LL temp=x;  
    x=y;  
    y=temp-a/b*y;  
    return ans;  
}  

LL cal(LL a,LL b,LL c)  
{  
    LL x,y;  
    LL gcd=e_gcd(a,b,x,y);printf("%d ",x);  
    if(c%gcd!=0) return -1;  
    x*=c/gcd;  
    b/=gcd;  
    if(b<0) b=-b;  
    LL ans=x%b;  
    if(ans<=0) ans+=b;  
    return ans;  
}  
int main()
{
    long long t;
    scanf("%lld",&t); 
    for(int i=1;i<=t;i++)
    {
        long long l,r,s,m;
        scanf("%lld%lld%lld%lld",&m,&s,&l,&r);
        /*if(l>r||s%m==0||l>=m) 
        {
            printf("-1\n");
            continue;
        }*/
        if(l==r)
        {
            printf("%lld\n",cal(s,m,r));
            continue;
        }
        for(long long j=1;;j++)
        {
            if((j*s)%m>=l&&(j*s)%m<=r)
             {
                printf("%lld\n",j);
                break;
             }
        }
    }
} 
1
0

  相关文章推荐
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:29775次
    • 积分:3354
    • 等级:
    • 排名:第11058名
    • 原创:307篇
    • 转载:1篇
    • 译文:0篇
    • 评论:8条
    友链