POJ2635The Embarrassed Cryptographer(大数取余+素数筛选+好题)
题意:K是由两个素数乘积,如果最小的素数小于L,输出BAD最小的素数,否则输出GOOD
分析 素数打表将 L 大点的素数打出来,一定要比L大,然后就开始枚举,只需K对 素数 取余 看看是否为零,但是 k 是一个很大的数,怎么存储又是一个问题,很好的一个解决方案:用千进制来表示 :加入是 1234567890 表示成 【890】【567】【234】【1】这样存储,如果是十进制对 k 取余,那么就是 从最高位开始 加上 上步*10再取余,放在这里就是*1000
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
#include <cmath>
using namespace std;
const int Max = + ;
int primer[Max + ], flag[Max + ], tot;
char str[ + ];
int Kt[], L;
void get_primer()
{
tot = ;
memset(flag, , sizeof(flag));
for(int i = ; i <= Max; i++)
{
if(flag[i] == )
{
primer[tot++] = i;
for(int j = i; j <= Max / i; j++)
flag[i * j] = ;
}
}
}
void PrimeTable(void)
{
tot=;
primer[tot++]=; for(int i=;i<=Max;i+=) //奇偶法
{
bool flaga=true;
for(int j=;primer[j]*primer[j]<=i;j++) //根号法+递归法
if(!(i%primer[j]))
{
flaga=false;
break;
}
if(flaga)
primer[tot++]=i;
}
return;
} int Pow(int x, int y)
{
int ans = ;
while(y--)
ans *= x;
return ans;
}
int mod(int a[], int key, int lenkt) //大数取余
{
int ans = ;
for(int i = lenkt - ; i >= ; i--)
{
ans = (ans * + a[i]) % key;
}
return ans;
}
int main(int argc, char** argv)
{
get_primer();
while(scanf("%s%d", str, &L) != EOF)
{
if(strcmp(str,"") == && L == )
break;
memset(Kt, , sizeof(Kt));
int len = strlen(str);
int lenkt = ;
for(int i = len - ; i >= ; i -= )
{
int t = i, cnt = ;
while(cnt < && t >= )
{
Kt[lenkt] += (str[t] - '') * Pow(, cnt); // pow函数是double,会不准,找了天错
cnt++;
t--;
}
lenkt++;
}
int have_find = false;
for(int i = ; primer[i] < L; i++)
{
if(mod(Kt, primer[i], lenkt) == )
{
have_find = true;
printf("BAD %d\n", primer[i]);
break;
}
}
if(have_find == false)
printf("GOOD\n");
}
return ;
}
POJ2635The Embarrassed Cryptographer(大数取余+素数筛选+好题)的更多相关文章
- POJ2635-The Embarrassed Cryptographer 大数求余
题目链接:http://poj.org/problem?id=2635 题目分析: http://blog.csdn.net/lyy289065406/article/details/6648530
- (POJ2635)The Embarrassed Cryptographer(大数取模)
The Embarrassed Cryptographer Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 13041 Accep ...
- poj2635The Embarrassed Cryptographer(同余膜定理)
The Embarrassed Cryptographer Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 15069 A ...
- [ACM] POJ 2635 The Embarrassed Cryptographer (同余定理,素数打表)
The Embarrassed Cryptographer Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 11978 A ...
- 1214 - Large Division -- LightOj(大数取余)
http://lightoj.com/volume_showproblem.php?problem=1214 这就是一道简单的大数取余. 还想还用到了同余定理: 所谓的同余,顾名思义,就是许多的数被一 ...
- java大数取余
java大数取余: 类方法:BigInteger.divideAndRemainder() 返回一个数组,key = 0为商key = 1为余数 import java.util.*; import ...
- hdu 1226 bfs+余数判重+大数取余
题目: 超级密码 Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- Codeforces Round #279 (Div. 2) C. Hacking Cypher (大数取余)
题目链接 C. Hacking Cyphertime limit per test1 secondmemory limit per test256 megabytesinputstandard inp ...
- 2019计蒜之道初赛3 D. 阿里巴巴协助征战SARS(困难)(大数取余+欧拉降幂)
阿里巴巴协助征战SARS(困难) 33.29% 1000ms 262144K 目前,SARS 病毒的研究在世界范围内进行,经科学家研究发现,该病毒及其变种的 DNA 的一条单链中,胞嘧啶.腺嘧啶均 ...
随机推荐
- Scala入门之Array
/** * 大数据技术是数据的集合以及对数据集合的操作技术的统称,具体来说: * 1,数据集合:会涉及数据的搜集.存储等,搜集会有很多技术,存储现在比较经典的是使用Hadoop,也有很多情况使用Kaf ...
- isinstance
class Foo: pass obj = Foo() isinstance(obj,Foo) class Foo: pass obj = Foo() isinstance(obj ,Foo) pri ...
- 顺序队列C/C++实现
#include <iostream> using namespace std; const int MAXSIZE = 1000; typedef int ELEMTYPE; const ...
- confluence的安装、备份和恢复(wiki)
还有一种比较不错的wiki工具MediaWiki 安装教程参考 http://pangge.blog.51cto.com/6013757/1560249 我是按照上面的教程搭建的 还有几篇不错的文章 ...
- inline-block 左边固定,右边自适应
<body> <div class="col-md-4 left"> <div class="logo">默沙东盲讲< ...
- css 选择器样式优先级
!important > 行内 >id > class >tag >*
- js-设置焦点
function CheckForm() { if(document.form1.trainingName.value==""){ alert("培训班名称不能为空!&q ...
- 算法与数据结构之选择排序(C语言)
#include<stdio.h> #include<stdlib.h> void SelectSort(int *a,int n);//预声明要调用的函数 int main( ...
- IOS传值的几种方式
1.代理 一对一 在第二个页面设置代理 1.1在最上方设置 //选择房间的代理 @protocol RoomVCDelegate <NSObject> 1.2设置代理方法 //方法 -(v ...
- springmvc使用RSA算法加密表单
今天被吐槽在客户端用js对密码进行md5加密其实也不见得安全.这种做法其实不见得有什么作用,学过计算机网络都知道,在网上抓一个包是很简单的事,就算别人抓包抓不到你原始密码,用这个md5后的密码一样可以 ...