首页 > 代码库 > 数论小结1.

数论小结1.

从白书上面的习题开始版切....但是发现时间不够了....

今天粗略的做了不少题目.....但是有些题目感觉实在是比较诡异.......感觉考的话也不太可能...不过还是写下来吧.

  1.Uva 10673

    已知x, k, 求 x = p * floor(x / k) + q * ceil(x / k).的解.

    思路:

      其实分类讨论就 ok 了. 当 x % k == 0 时, 取 p = x * k, q = 0;

      否则, floor 与 ceil 相差 1. 怎么做? 你懂得.  

  2. Uva 11768  

    求 AB 线段上的整点的个数...(坐标为 0.1 的倍数.)

    思路:

    标准做法和我一开始想的暴力搞法是一样的.....

    暴跳直到跳到整点为止.......(感觉非常的不科学.)

    然后,我们就直接 gcd 就 ok 了.(为什么网上的人的代码都那么长一个个?)

  3. Uva 11728

    求一个最大的数N, 使得这个数的因子之和为S (S <= 1000)

    思路:

      呵呵, NOIP的暴力题.S <= 1000所以N <= 1000....O(N^2)可做.

  4. Uva 10692

    求 a1 ^ a2 ^ a3 ^ a4 ... ^ an % m 的值.(n <= 10)

    思路:

    这个才是数论的题目....

    这个方法的证明我看不懂....数学蒟蒻...

    不过结论是这样的. a ^ x = a ^ (x % m + m) (mod m).

    这个问题显然是可递归的, 加上快速幂就 ok 了.

  5. Uva 01426

    已知一个数的一个离散平方根, 求一个数所有的离散平方根. 定义为: r ^ 2 = x (mod n) 则 r 为 x 在 模 n 意义下的离散平方根.

    思路:

    这个是好题, 

    已知的平方根的 r1, 未知的为 r2.

    则:

      r1 ^ 2 = x + k1 * n.

      r2 ^ 2 = x + k2 * n.

    两式相减:

      r1 ^ 2 - r2 ^ 2 = (k1 - k2) * n

    整理得:

      (r1 + r2) * (r1 - r2) = k3 * n.

    如果令 A * B  = n (非常的精妙!)

    则 r1 + r2 = 0 (mod A) && r1 - r2 = 0 (mod B) ¹

    或 r1 - r2 = 0 (mod A) && r1 + r2 = 0 (mod B) 

    我们先讨论 ¹ 式.

    两式相加, 得到 2 * r1 = p * A (mod B).

    也即: p * A = 2 * r1 (mod B).

    显然这个东西是能够用 exgcd 求出所有的解的.

      对于 exgcd 求出的是满足 p * A + q * B = gcd(A, B).

    的解.

      令 d = gcd(A,B), 显然, 如果 2 * r1 % d != 0 方程是无解的.

      否则这个方程的第一个可行解就是 p = x0 * (2 * r1) / d.(x0 是 exgcd 求出来的解.)

      带回 ¹ 即可求得另外一个解.

      参见线性模方程的通解表达式. x = x0 + i * (B / d). 那么 p = ( x0 + i * (B / d) ) * (2 * r1) / d.

      分析一下复杂度, 因为线性模方程的解的个数为 O(gcd(A,B)) 个, 所以 极限情况下是 sqrt(N) 的.

    用 set 哈希一下就 ok 了.

  6. Uva 01415

      问一个数是否是高斯素数, 高斯素数的定义即是这个数不能被分解成两个高斯整数的乘积...

      关于高斯整数的定义: 参见 Wikipedia.

    思路:

      我觉得这个道题简直就是在乱搞,尤其是样例解释都不太符合高斯整数的定义?

 

      唯一的收获就是费马平方和定理.... 一个奇质数能被拆分成两个数的平法和的充要条件是 p % 4 = 1.

      为什么不是偶质数? 呵呵, 因为偶质数只有2........

<style></style>

    

数论小结1.