• HDU 6189 Law of Commutation(规律)


    题意:

    给定n,a,求区间 [ 1 , 1<<n ] 的数b 满足 的个数

    分析:打出暴力程序可以发现当a为奇数的时候结果为一;

    当a为偶时 , a^b=2^(k+b)mod 2^n ; 结果肯定为0 ; 

    那就有b^a mod 2^n=0 ; 则 b也为偶数 ,在分析:

    然后分类讨论 b <= n时暴力搞搞

     b > n时 就需要满足 b^a % (2^n)等于0了

     同理就要满足b^a = 2^a * k^a % (2^n)  = 0 那么假设k有x个2 使得(x + 1) * a >= n就好了

    #include <stdio.h>
    #include <algorithm>
    #include <iostream>
    using namespace std;
    typedef long long ll;
    
    ll m;
    ll pow_mod(ll x, ll y)
    {
        ll res = 1;
        while(y)
        {
            if(y & 1) res = res * x % m;
            y >>= 1;
            x = x * x % m;
        }
        return res;
    }
    
    int main()
    {
        ll n, a;
        while(~scanf("%lld%lld", &n, &a))
        {
            m = (1 << n);
            if(a & 1)
            {
                puts("1");
                continue;
            }
            else
            {
                ll ans = 0;
                for(int i = 1; i <= n; i++)
                {
                    ll o = pow_mod(a, i);
                    ll u = pow_mod(i, a);
                    if(o == u) ans++;
                }
    
                if(a > n) ans += m / 2 - n / 2;
                else
                {
                    ll p;
                    if(n % a != 0) p = n / a + 1;
                    else p = n / a;
    
                    p = (1LL << p);
                    ans += m / p - n / p;
                }
                printf("%lld
    ", ans);
            }
        }
        return 0;
    }
    View Code
  • 相关阅读:
    【HDOJ】1558 Segment set
    【HDOJ】2395 Alarm Clock
    【HDOJ】4278 Faulty Odomete
    【HDOJ】2571 命运
    【HDOJ】2150 Pipe
    【HDOJ】1277 全文检索
    【HDOJ】1134 Game of Connections
    【HDOJ】5131 Song Jiang's rank list
    【HDOJ】2772 Matchsticks
    【HDOJ】2577 How to Type
  • 原文地址:https://www.cnblogs.com/shuaihui520/p/10006449.html
Copyright © 2020-2023  润新知