zoukankan      html  css  js  c++  java
  • 【阔别许久的博】【我要开始攻数学和几何啦】【高精度取模+同余模定理,*】POJ 2365 The Embarrassed Cryptographer

    题意:给出一大数K(4 <= K <= 10^100)与一整数L(2 <= L <= 106),K为两个素数的乘积(The cryptographic keys are created from the product of two primes)

       问构成K的最小素数是否绝对小于L,若是,则输出BAD p,p为最小素数,否则输出GOOD;

    分析:从小到大枚举1~10^6内的素数p,while(p<L)时,判断K是否能被p整除,若能则证明构成K的最小素数绝对小于L,反之则大于L;

    Tags:1、素数打表

        注意打表时要求最大的素数大于10^6,否则在循环while(p<L)会造成死循环

       2、大整数char/string形式输入;

       3、所谓同余模定理其最常见的应用就是:(a+b)%n = a%n+b%n;  (a*b)%n=(a%n*b%n)%n;

       4、大整数取模算法同样适用于高进制的情况(本题为千进制),注意将K转换为千进制时的优化,否则很容易TLE;本题使用的方法为“局部有序,全局倒序”,即

        K = 12345678910 = [910][678][345][12];这样则可以利用以下方式求得

    1 for(int i = 0; i < len; i++) 
    2 {
    3     int pos = (len+2-i)/3-1;
    4     kt[pos] = kt[pos]*10+(k[i]-'0');
    5 }
    6 cnt = (len+2)/3;
    1 bool BI_Mod(int x)
    2 {
    3     int ans = 0;
    4     for(int i = cnt-1; i >= 0; i--)
    5     {
    6         ans = (int)(((LL)ans*1000+kt[i])%x);
    7     }
    8     return ans;
    9 }
  • 相关阅读:
    软件构架实践_阅读笔记04(-11)
    软件构架实践_阅读笔记03(7-9)
    Tsinsen-A1488 : 魔法波【高斯消元+异或方程组】
    Tsinsen-1487:分配游戏【树状数组】
    Tsinsen-1486:树【Trie树 + 点分治】
    Splay初步【bzoj1503】
    Treap初步
    [BZOJ3207] 花神的嘲讽计划Ⅰ
    可持久化Trie树初步
    可持久化线段树初步
  • 原文地址:https://www.cnblogs.com/LLGemini/p/4501584.html
Copyright © 2011-2022 走看看