• 洛谷P1495 【曹冲养猪】


    逐步满足法

    举个例子来说:

    已知$egin{cases}aequiv 3pmod 5\aequiv 1pmod 9\aequiv 7pmod {16}end{cases}$,求a

    我们可以这样来想:

    一、首先,先找到一个最小的数满足$aequiv 3pmod 5$,也就是3。

    二、再找到一个最小的数同时满足$aequiv 3pmod 5$和$aequiv 1pmod 9$:

    $quadquad$在上面,我们已经找到了满足$aequiv 3pmod 5$的3,也就是说当3加上5的倍数时仍满足$aequiv 3pmod 5$。所以我们把3一直加5直到找到满足$aequiv 1pmod 9$的最小数,也就是28。

    三、最后找出同时满足上面三个试子的最小数:

    $quadquad$由于28加上5的倍数时满足$aequiv 3pmod 5$,加上9的倍数时满足$aequiv 1pmod 9$,所以加上5和9的公倍数时同时满足$aequiv 3pmod 5$和$aequiv 1pmod 9$,因为$lcm(5,9)=45$,所以把28一直加45,直到能使$aequiv 7pmod {16}$成立,得出这个数为343。

    同理,再多的方程也是一样的。

    于是代码就这样出来了:

    #include<bits/stdc++.h>
    using namespace std;
    long long n,t,now,a[15],b[15];
    long long lcm(long long x,long long y){
        long long tim=x*y;
        while(x!=y){
            if(x>y)x=x-y;
            else y=y-x;
        }
        return tim/x;
    }
    int main(){
        scanf("%lld",&n);
        for(long long i=1;i<=n;i++)scanf("%lld%lld",&a[i],&b[i]);
        t=a[1],now=b[1];
        for(long long i=2;i<=n;i++){
            while(now%a[i]!=b[i])now+=t;
            t=lcm(t,a[i]);
        }
        printf("%lld",now);
    }
  • 相关阅读:
    Eclipse (indigo) 中安装jdk包并执行Maven
    UVA
    Android 仿QQ界面的实现
    Ajax是什么
    jieba.NET与Lucene.Net的集成
    jieba中文分词的.NET版本:jieba.NET
    SharePoint 2013技巧分享系列
    SharePoint 2013常用开发工具分享
    SharePoint 2013技巧分享系列
    SharePoint 2013技巧分享系列
  • 原文地址:https://www.cnblogs.com/gzezzry/p/12195769.html
Copyright © 2020-2023  润新知