• 数论小结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........

        

  • 相关阅读:
    如何列出陣列中大於n的所有元素? (C/C++) (STL)
    為什麼int *ptr = 345;這樣的寫法有問題?
    如何使用STL寫XML轉檔程式? (C/C++) (STL) (Web) (XML)
    如何判斷回文(palindrome) ? (C/C++) (C) (STL)
    如何將int轉string? (C/C++) (C)
    如何將輸入的字串存到記憶體後,再一起印出來? (C/C++) (C)
    如何為程式碼加上行號? (C/C++) (STL)
    如何将字符串前后的空白去除(C/C++) (STL)
    簡單的Linked List實現
    如何將struct塞進vector? (C/C++) (STL)
  • 原文地址:https://www.cnblogs.com/Mr-ren/p/4251593.html
Copyright © 2020-2023  润新知