POJ 2115 C Looooops【数论】
很容易看出來一個同余式,說到底是解一個線性同余方程,計算機解通常有拓展歐幾里得和歐拉定理兩種算法,參照去年的NOIP水題,問題是這題數據范圍是2^32所以要int64 TAT
#include<cstdio>
#include<iostream>
#include<string.h>
#include<math.h>
using namespace std;
__int64 exgcd(__int64 a,__int64 b,__int64&x,__int64 &y)
{
if(b==0)
{
x=1;y=0;return a;
}
else
{
__int64 r=exgcd(b,a %b,y,x);
y-=x*(a/b);
return r;
}
}
__int64 lme(__int64 a,__int64 b,__int64n)//ax=b(mod n)
{
__int64 x,y;
__int64 d=exgcd(a,n,x,y);
if(b%d!=0)return -1;
__int64 e=x*(b/d)%n+n;
return e%(n/d);
}
int main()
{
__int64 a,b,c,k;
scanf("%I64d%I64d%I64d%I64d",&a,&b,&c,&k);
while(1)
{
__int64 d=lme(c,b-a,1LL<<k);
if (d==-1)
{
printf("FOREVER\n");
}
else
{
printf("%I64d\n",d);
}
scanf("%I64d%I64d%I64d%I64d",&a,&b,&c,&k);
if(a==0 && b==0 && c==0 && k==0) break;
}
return 0;
}
總結
以上是生活随笔為你收集整理的POJ 2115 C Looooops【数论】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 成功解决pycharm 的setting
- 下一篇: ORACLE Physical Stan