• POJ 2115 C Looooops(模线性方程)


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

    题意:

    给你一个变量,变量初始值a,终止值b,每循环一遍加c,问一共循环几遍终止,结果mod2^k.如果无法终止则输出FOREVER。

    思路:

    根据题意原题可化成c * x = b - a mod (2 ^ k),然后解这个模线性方程。

     1 #include<iostream>
     2 #include<algorithm>
     3 #include<cstring>
     4 #include<cstdio>
     5 #include<sstream>
     6 #include<vector>
     7 #include<stack>
     8 #include<queue>
     9 #include<cmath>
    10 #include<map>
    11 using namespace std;
    12 typedef long long ll;
    13 typedef pair<int,int> pll;
    14 const int INF=0x3f3f3f3f;
    15 const int maxn=1000+5;
    16 
    17 int a,b,c,k;
    18 
    19 void gcd(ll a,ll b,ll& d,ll& x,ll& y)
    20 {
    21     if(!b)  {d=a;x=1;y=0;}
    22     else
    23     {
    24         gcd(b,a%b,d,y,x);
    25         y-=x*(a/b);
    26     }
    27 }
    28 
    29 ll modeq(ll a,ll b,ll n)
    30 {
    31     ll e,i,d,x,y,f;
    32     gcd(a,n,d,x,y);
    33     if(b%d)  return -1;
    34     else
    35     {
    36         f=n/d<0?(-1*n/d):n/d;
    37         e=(x*(b/d)%f+f)%f;
    38         return e;
    39     }
    40 }
    41 
    42 int main()
    43 {
    44     //freopen("D:\input.txt","r",stdin);
    45     while(~scanf("%d%d%d%d",&a,&b,&c,&k) && a+b+c+k!=0)
    46     {
    47         ll n=b-a;
    48         ll m=1LL<<k;
    49         ll ans = modeq(c,n,m);
    50         if(ans==-1)  puts("FOREVER");
    51         else printf("%lld
    ",ans);
    52     }
    53     return 0;
    54 }
  • 相关阅读:
    设计模式之Singleton(单态)(转)
    shell编程与循环
    连接查询、视图、事务、索引、外键
    mariadb主从架构
    Lvs虚拟服务器
    python字符串详解
    firewalld防火墙详解
    自动化运维ansible用法
    元组、列表、字典、集合
    内置函数for、while循环控制
  • 原文地址:https://www.cnblogs.com/zyb993963526/p/6921519.html
Copyright © 2020-2023  润新知