题意:给出一大数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 }
时间: 2024-10-08 09:30:13