zoukankan      html  css  js  c++  java
  • Bzoj2219--数论之神

    Description

    在ACM_DIY群中,有一位叫做“傻崽”的同学由于在数论方面造诣很高,被称为数轮之神!对于任何数论问题,他都能瞬间秒杀!一天他在群里面问了一个神题: 对于给定的3个非负整数 A,B,K 求出满足 (1) X^A = B(mod 2*K + 1) (2) X 在范围[0, 2K] 内的X的个数!自然数论之神是可以瞬间秒杀此题的,那么你呢?

    Input

    第一行有一个正整数T,表示接下来的数据的组数( T <= 1000) 之后对于每组数据,给出了3个整数A,B,K (1 <= A, B <= 10^9, 1 <= K <= 5 * 10^8)

    ----------------------------------------------此后一千里---------------------------------------------------------

    毒瘤出题人,毁我青春。。。

    说正事。。要求模的p并不是一个质数,所以我们先考虑中国剩余定理把它拆开。

    我们发现对于每个x^A = B mod pi^ai的解的个数乘起来就是原等式的解的个数,因为拆出的每个方程的解表示原方程的解模拆出的素数幂的值,假设我们拆出了k个方程,那么这k个方程的解和原解又可以建立一个k个方程的方程组,每种不同的方程组都对应原方程一个不同的解,所以原解的个数是拆开后方程解个数的乘积。

    然后我们就把问题简化到了x^A = B mod pi^ai的解的个数。

    然后大力讨论一波。

    如果B mod pi^ai = 0,那么x^A中pi的指数一定要大于等于ai。

    如果B 和 pi^ai互质,那么直接把式子取个ln,就变成了Alnx = lnb mod phi(pi^ai),就是一个扩展欧几里得方程的形式,求下解的个数。

    如果B 不满足上面两个条件,就设B = pi^t * b,如果t mod A != 0的话无解,否则原式化为$(frac{x}{p_i^{frac{t}{A}}})^A = b:mod:p_i^{ai - t}$,就变到了第二种情况,只不过这时取值范围有点小问题,解的数量要乘上$p^{t-frac{t}{A}}$。

    然后ln的求法是bsgs。

    代码 :无

  • 相关阅读:
    div3--C. Pipes
    Problem F Free Weights
    H
    Problem C Careful Ascent
    Problem L. World Cup
    Problem E. Bet
    Problem D. Ice Cream Tower
    A. Number Theory Problem
    A
    软考知识点梳理--项目评估
  • 原文地址:https://www.cnblogs.com/ihopenot/p/6801054.html
Copyright © 2011-2022 走看看