首页 > 代码库 > POJ 1061
POJ 1061
约会果然是件头疼的问题
看起来很简单
列了个式子就不知道怎么做了
数论题
欺负我数学不好
Attention:
(Ax+b)%C==0
有解条件为 b%gcd(A,C)==0;
证明在代码里
1 #include <stdio.h> 2 #include <iostream> 3 using namespace std; 4 5 long long x,y,m,n,L,dist; 6 //辗转相除求最大公约数 7 int gcd(int a,int b) 8 { 9 if(b==0)return a;10 return gcd(b,a%b);11 }12 // 把跳的慢的视为相对静止13 int main()14 {15 while(cin>>x>>y>>m>>n>>L)16 {17 //计算出两只青蛙的距离差18 //先比较快慢19 if(m>n)20 dist=(y-x+L)%L;21 else22 {23 dist=(x-y+L)%L;24 int temp=m;25 m=n;26 n=temp;27 }28 29 //现在证明判断条件30 //等式为: (i*L+dist)%(m-n)==031 //若有解 let t = gcd(L,m-n)32 //let L = ct;m-n = bt;33 //ict +dist = bkt34 //dist = (bk - ic)t35 //dist % t = 0; 36 if(dist%gcd(m-n,L)!=0)37 {38 cout<<"Impossible"<<endl;39 continue;40 }41 long long k=0;42 int i =0;43 for(int i=0;; i++)//暴力来试出结果44 {45 if((i*L+dist)%(m-n)==0)46 {47 k=(i*L+dist)/(m-n);48 break;49 }50 }51 cout<<k<<endl;52 }53 return 0;54 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。