HDU 3579 Hello Kiki(模线性方程组)
来源:互联网 发布:asp php一键搭建环境 编辑:程序博客网 时间:2024/06/07 03:25
- 原题链接:Here!
- 思路:典型模线性方程组的题,需要注意的是如果最后解为0,需要输出M[]的lcm。这是为什么呢?如果解为0,也就是说当 0 ≡ Ai ( mod Mi ) (1 <= i <= n),即Ai = Mi*c(c为非负整数)原来的同余方程X ≡ Ai( mod Mi )变为 X = Mi*k (k为非负整数),出现这种情况的只能是X为lcm( M1,M2,M3,....,Mn )。
- 代码:
#include<bits/stdc++.h>using namespace std;typedef long long LL; LL gcd(LL a,LL b){return b==0?a:gcd(b,a%b);}LL exgcd(LL a,LL b,LL &x,LL &y){if(b==0){x=1; y=0; return a;}LL d = exgcd(b,a%b,x,y);LL tmp = x;x = y;y = tmp - a/b*y;return d;}LL solve(LL a[],LL b[],LL num){LL a1,a2,b1,b2,k1,kk,tmp,d,x,y,c;bool ok = true; a1 = a[0];b1 = b[0];for(int i=1;i<num;i++){a2 = a[i];b2 = b[i];c = b2 - b1;d = exgcd(a1,a2,x,y);if(c%d){ok = false; break;}tmp = a2/d;k1 = x*c/d;kk = (k1%tmp + tmp) % tmp;b1 = b1 + a1*kk; a1 = a1*a2/d;}if(!ok)return -1;else return b1;}int main(){LL t,n,M[100],A[100],lcm;int kase = 0;cin>>t;while(t--){lcm = 1;cin>>n;for(int i=0;i<n;i++){cin>>M[i];lcm = lcm/gcd(lcm,M[i])*M[i];}for(int i=0;i<n;i++)cin>>A[i];LL ans = solve(M,A,n);printf("Case %d: ",++kase);if( ans!=-1 && ans==0 )cout<<lcm<<endl;elsecout<<ans<<endl;}return 0;}
0 0
- HDU 3579 Hello Kiki(模线性方程组)
- Hdu 1573 X问题 + Hdu 3579 Hello Kiki (模线性方程组-非互质中国剩余定理)
- Hdu 3579 Hello Kiki
- hdu 3579 Hello Kiki
- HDU 3579 (Hello Kiki)
- hdu 3579 Hello Kiki
- HDU 3579 Hello Kiki
- Hdu 3579 Hello Kiki(同余模方程组)
- 【HDU】3579 - Hello Kiki(CRT)
- HDU 3579 Hello Kiki 数论-(孙子定理)
- hdu 3579 Hello Kiki(线性同余方程)
- HDU 3579 Hello Kiki(中国剩余定理)
- HDU 3579 Hello Kiki(拓展中国剩余定理)
- hdu 3579 Hello Kiki(一元线性同余方程组)
- HDU 3579 Hello Kiki【中国剩余】
- HDU 3579——Hello Kiki
- hdu 3579 Hello Kiki 同余
- hdu3597Hello Kiki 一元模线性方程组
- pcap文件格式
- java使用io流技术替换LOL英雄的皮肤
- Android开发如何去除标题栏title
- [leetcode]394. Decode String
- 网管的自我修养-人际关系
- HDU 3579 Hello Kiki(模线性方程组)
- XML的CDATA区和PI指令(处理指令)
- 无缝滚动
- HDU 1494(动态规划初步)
- 【C++ STL应用与实现】6: 如何使用std::list
- Maya Calendar POJ - 1008
- C#结构体与类的区别
- 马太效应
- 【C++ STL应用与实现】12: 如何使用std::stack