zoukankan      html  css  js  c++  java
  • HDU 5478 Can you find it(数学问题)

    题目大意:
    给你  ak1⋅n+b1+ bk2⋅n−k2+1 = 0 (mod C)(n = 1, 2, 3, ...). 要求所有的n都满足上述的式子。
    问这样的a,b 有多少对?
     
    分析这个问题的时候需要补充一下余数的性质定理。
     
    • 若a≡b (% p),则对于任意的c,都有(a + c) ≡ (b + c) (%p);
    • 若a≡b (% p),则对于任意的c,都有(a * c) ≡ (b * c) (%p);
    • 若a≡b (% p),c≡d (% p),
      则 (a + c) ≡ (b + d) (%p),
           (a - c) ≡ (b - d) (%p),
           (a * c) ≡ (b * d) (%p),
           (a / c) ≡ (b / d) (%p);
       
      ===============================================================================
      n = 1  ........................   a^(k1+b1) + b  = 0(Mod C)  ①
      n = 2 .........................   a^(2*k1+b1) + b^(k2+1) = 0 (Mod C)  ②
      设 ①*a^k1 .................................. a(2*k1+b1) + a^k1*b = 0(Mod C)  ③ 
    • 根据式子  ② 和 ③ 得:
              a^(2*k1+b1) + b^(k2+1) <=> a(2*k1+b1) + a^k1*b
              化简后:  b^k2 <=> a^k1
    所以经过上面式子的证明,可以得知,我们只要前两项Mod C == 0 那么 这个a和b就是符合的。
     
     
    =======================================================================================================
    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #include<cmath>
    using namespace std;
    typedef long long LL;
    const LL INF = 0xffffff;
    const LL maxn = 100005;
    const LL MOD = 1e9+7;
    LL C, k1, k2, b1;
    
    LL QuickPow(LL a, LL k, LL mod)
    {
        LL ans = 1, P = a;
        while( k )
        {
            if(k%2 == 1)
                ans = (ans * P)%mod;
            k /= 2;
            P = (P * P)%mod;
        }
        return ans;
    }
    
    int main()
    {
        LL ans = 0, a, b;
        int cas = 1;
    
        while(cin >> C >> k1 >> b1 >> k2)
        {
            ans = 0;
            printf("Case #%d:
    ", cas ++);
    
            for(int i=1; i<C; i++)///枚举a
            {
                a = i;
                b = C - QuickPow(a, k1+b1, C);
                if( (QuickPow(a, 2*k1+b1, C) + QuickPow(b, k2+1, C))%C == 0 )
                {
                    printf("%I64d %I64d
    ", a, b);
                    ans ++;
                }
    
            }
            if(ans == 0)
                printf("-1
    ");
        }
        return 0;
    }
     
     
     
  • 相关阅读:
    【JZOJ3360】【NOI2013模拟】苹果树
    【SDOI2009】【BZOJ1878】HH的项链
    【JZOJ3234】阴阳
    【BZOJ3482】【JZOJ3238】[COCI2013]hiperprostor 超空间旅行
    【JZOJ3348】【NOI2013模拟】秘密任务 (Standard IO) (最小割唯一性的判定)
    【JZOJ4665】【CF407E】k-d-sequence
    【SHTSC2013】阶乘字符串
    【SHTSC2013】超级跳马
    半平面交笔记
    转:Why SeaJS
  • 原文地址:https://www.cnblogs.com/chenchengxun/p/4844740.html
Copyright © 2011-2022 走看看