poj 2115 C Looooops

本文通过解决POJ 2115问题,详细介绍了扩展欧几里得算法的应用及调试过程。作者分享了自己在编码过程中遇到的问题,如类型错误导致的调试困难,并反思了如何提高编码质量。此外,还提供了实现该算法的具体代码。

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;
}

 

转载于:https://www.cnblogs.com/liulangye/archive/2012/05/04/2483162.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值