poj 2115 C Looooops

http://poj.org/problem?id=2115

自己最不喜欢的就是数论题 但不能因为不喜欢就不去做了 做会了就喜欢了

通过做道题本人需要深刻的反省,做这道题浪费了我太多时间 代码中的long long 较多其中两个写成了long

我愣是没看出来结果悲剧了N久     就此反省

1.细心,不能代码一多就乱了

2.明明可以用个#define long long LL 之类的代替的,既省时间有安全,为什么没用呀!亲。

3.代码久调试不对,更放一下就的放一下。让脑子清醒一下。这道题就是。回去睡了一觉回来没用5分钟就发现错误了

伤不起呀,以后要多加注意呀,得养成良好的编码习惯。

对于扩展欧几里得算法理解的还不够清楚。

天下尚未拿下,天才仍需努力。

#include<iostream>

#include<cmath>

#include<string>

#include<cstring>

#include<queue>

#include<map>

#include<cstdio>



using namespace std;



long long dd(long long a,long long b,long long &x,long long &y)

{

   // cout<<a<<" "<<b<<endl;

    if(b==0)

    {

        x=1;y=0;

        return a;

    }

    long long temp=dd(b,a%b,x,y);

    long long t=x;x=y;y=(t-(a/b)*y);

    return temp;

}

long long find(long long a,long long b,long long c)

{

    //cout<<c<<endl;

    long long x,y;

    long long d=dd(a,c,x,y);

    //cout<<b<<" "<<d<<endl;

    if(b%d!=0)

    return -1;

    x=x*b/d;

    long long t=c/d;

    x=(x%t+t)%t;

    return x;

   // return x*(b/d);

}

int main()

{

    //freopen("c.in","r",stdin);

    //freopen("c2.out","w",stdout);

    long long A,B,C,k;

    while(cin>>A>>B>>C>>k)

    {

        //cout<<A<<" "<<B<<" "<<C<<" "<<k<<endl;

        if(!A&&!B&&!C&&!k)

        break;

        long long l=1;

        long long ans=find(C,B-A,l<<k);

        if(ans==-1)

        printf("FOREVER\n");

        else

        cout<<ans<<endl;

    }

    return 0;

}

 

你可能感兴趣的:(oop)