题目链接:https://www.cnblogs.com/kuangbin/archive/2012/04/01/2429463.html

题意:给出大数s (s<=10100) ,L (<=106),s是两个素数的乘积,求其最小因子即这两个素数中较小者是否小于L。

思路:先通过欧筛法打表计算出106以内的素数,大概有8e4个。然后用千进制表示s,如将12345678表示成[012][345][678],用整型数组Kt表示,前面补0,这样做之后利用同余模定理计算Kt对x的模。如计算[012][345][678]%10,记模为M,则M=0, M=12%10=2, M=(2*1000+345)%10=5, M=(5*1000+678)%10=8。然后主要思路就是从小遍历打表得出的素数表,寻找是否存在能整除Kt的素数。用千进制的原因是为了降低复杂度,据说用百进制会T,万进制会wa(可能计算过程会超int)。

AC代码:

#include<cstdio>
#include<iostream>
#include<cstring>
#include<string>
using namespace std; const int maxn=;
int prime[maxn],vis[maxn],cnt,L,len1,len2,Kt[];
string s; void get_prime(){
memset(vis,,sizeof(vis));
for(int i=;i<=;++i){
if(vis[i]) prime[cnt++]=i;
for(int j=;j<cnt&&i*prime[j]<=;++j){
vis[i*prime[j]]=;
if(i%prime[j]==) break;
}
}
} bool Mod(int x){
int M=;
for(int i=;i<len2;++i)
M=(M*+Kt[i])%x;
return M==?true:false;
} int main(){
get_prime();
while(cin>>s>>L,(s[]!='')||L){
len1=s.length();
if(len1%==) s=""+s;
else if(len1%==) s=""+s;
len1=s.length();
len2=len1/;
for(int i=;i<len2;++i)
Kt[i]=(s[*i]-'')*+(s[*i+]-'')*+(s[*i+]-'');
bool flag=true;
int p=;
while(p<cnt&&prime[p]<L){
if(Mod(prime[p])){
flag=false;
printf("BAD %d\n",prime[p]);
break;
}
++p;
}
if(flag)
printf("GOOD\n");
}
return ;
}

poj2635(千进制取模+同余模定理)的更多相关文章

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

    题意:给出一大数K(4 <= K <= 10^100)与一整数L(2 <= L <= 106),K为两个素数的乘积(The cryptographic keys are cre ...

  2. The Embarrassed Cryptographer(高精度取模+同余模定理)

    Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 11435   Accepted: 3040 Description The ...

  3. poj 2635 千进制

    转自:http://www.cnblogs.com/kuangbin/archive/2012/04/01/2429463.html 大致题意: 给定一个大数K,K是两个大素数的乘积的值. 再给定一个 ...

  4. POJ - 2635 The Embarrassed Cryptographer(千进制+同余模)

    http://poj.org/problem?id=2635 题意 给一个大数K,K一定为两个素数的乘积.现给出一个L,若K的两个因子有小于L的,就输出BAD,并输出较小的因子.否则输出GOOD 分析 ...

  5. POJ 2635 The Embarrassed Cryptographer (千进制,素数筛,同余定理)

    The Embarrassed Cryptographer Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 15767   A ...

  6. POJ - 1426 暴力枚举+同余模定理 [kuangbin带你飞]专题一

    完全想不到啊,同余模定理没学过啊,想起上学期期末考试我问好多同学'≡'这个符号什么意思,都说不知道,你们不是上了离散可的吗?不过看了别人的解法我现在会了,同余模定理介绍及运用点这里点击打开链接 简单说 ...

  7. POJ 1426 Find The Multiple &amp;&amp; 51nod 1109 01组成的N的倍数 (BFS + 同余模定理)

    Find The Multiple Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 21436   Accepted: 877 ...

  8. poj 1426 Find The Multiple ( BFS+同余模定理)

    Find The Multiple Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 18390   Accepted: 744 ...

  9. 同余模定理 HDOJ 5373 The shortest problem

    题目传送门 /* 题意:题目讲的很清楚:When n=123 and t=3 then we can get 123->1236->123612->12361215.要求t次操作后, ...

随机推荐

  1. python3下安装Selenium插件和驱动

    import sysimport osimport shutilimport time os.system('pip install selenium') file_name="IEDriv ...

  2. Spring注解标签详解@Autowired @Qualifier等

    http://blog.csdn.net/wangsr4java/article/details/42777855 @Component.@Repository.@Service.@Controlle ...

  3. 计算机网络协议包头赏析-IP

    上次和大家聊了聊以太网的帧格式,本文会讲解IP数据报格式的定义. == 开门见山,先上图: 任何一个IP数据报都是由首部和数据两部分组成,而且首部基本是固定长度的,长度为20字节.这一点很重要,其他都 ...

  4. ie11 调试工具不能使用

    使用ie11仿真ie8测试兼容性的时候,方便调试 dom和仿真都不能用 搜索 https://www.ludou.org/win7-ie-11-f12-bug.html也有相关问题 安装补丁 64位的 ...

  5. C# 读取ini文件,读不出来原因

    先赋上相关读取ini文件代码 public class INIHelper { public string inipath; [DllImport("kernel32")] pri ...

  6. C++与java编程区别(一)

    转载自http://blog.sina.com.cn/s/blog_75f4e17c0101295o.html C++ HelloWorld main.cpp #include< iostrea ...

  7. 吴裕雄 18-MySQL GROUP BY 语句

    GROUP BY 语句根据一个或多个列对结果集进行分组.在分组的列上我们可以使用 COUNT, SUM, AVG,等函数.GROUP BY 语法SELECT column_name, function ...

  8. Redis Cluster 添加/删除 完整折腾步骤

    Redis还是挺好玩的,今天测试了集群的添加.删除节点.重分配slot等.更深入的理解redis的游戏规则.步骤繁多,但是详细. 环境解释: 我是在一台Centos 6.9上测试的,各个redis节点 ...

  9. 税控服务器 TC5002UpdatePackage 安装更新

    Linux版税控服务器单税号版本税控应用:   TC5002UpdatePackage2008160711.zip         单税号服务器(型号:TCG-01S1) Linux版税控服务器20个 ...

  10. linux 设备驱动分类

    1. 字符设备 :在I/O传输过程中以字符为单位. 2. 块设备: 在传输过程中以块为单位,相关概念有 缓冲,I/O调度,请求队列.主要体现出与字符设备在操作硬件的接口实现方式上是不一样的. 3. 网 ...