The young and very promising cryptographer Odd Even has implemented the security module of a large system with thousands of users, which is now in use in his company.

The cryptographic keys are created from the product of two primes, and are believed to be secure because there is no known method for factoring such a product effectively. 
What Odd Even did not think of, was that both factors in a key should be large, not just their product. It is now possible that some of the users of the system have weak keys. In a desperate attempt not to be fired, Odd Even secretly goes through all the users keys, to check if they are strong enough. He uses his very poweful Atari, and is especially careful when checking his boss' key.

Input

The input consists of no more than 20 test cases. Each test case is a line with the integers 4 <= K <= 10 100 and 2 <= L <= 10 6. K is the key itself, a product of two primes. L is the wanted minimum size of the factors in the key. The input set is terminated by a case where K = 0 and L = 0.

Output

For each number K, if one of its factors are strictly less than the required L, your program should output "BAD p", where p is the smallest factor in K. Otherwise, it should output "GOOD". Cases should be separated by a line-break.

Sample Input

143 10
143 20
667 20
667 30
2573 30
2573 40
0 0

Sample Output

GOOD
BAD 11
GOOD
BAD 23
GOOD
BAD 31 题意:求给出的一个数,求k中是否有比L小的的因子,其中K是大数 思路:因为我们L范围只有1e6,所以我们找寻因子可以直接遍历1-(L-1),然后我们进行大数取余操作,直接看余数是否为0即可
但是这样的时间复杂度就超时了,字符串长度是100 * L范围1e6 * 20组数据 = 2*1e9 (超时)
这个时候我们就要进行优化20组数据我们无法优化,只能从大数取余和找因子这里入 1,找因子
我们可以只找素因子,如果素因子都不可以说明其他因子也行不通,所以我们可以进行素数筛法打表 2.大数取余
因为我们在进行找因子的时候我们每次都要进行大数取余,重复这个操作,我们就可以进行大数转换千进制,就可以在进行大数取余操作的时候大大缩减时间复杂度
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define MAX 1000100
using namespace std;
int n;
int prime[MAX+];
char str[];
void primetable()//素数打表
{
int ps=;
prime[ps++]=;
for(int i=;i<=MAX;i+=)
{
int flag=;
for(int j=;prime[j]*prime[j]<=i;j++)
if(!(i%prime[j]))
{
flag=;
break;
}
if(flag)
prime[ps++]=i;
}
}
int main()
{
primetable();
while(scanf("%s%d",str,&n)!=EOF)
{
if(str[]==''&&n==) break;
int len=strlen(str);
int ans=;
int a[];
for(int i=len-;i>=;)//转换成千进制
{
if(i<){
if(i==)
a[ans++]=str[i]-'';
else a[ans++]=str[i]-''+(str[i-]-'')*;
i=-;
}
else{
a[ans++]=str[i]-''+(str[i-]-'')*+(str[i-]-'')*;
i-=;
}
}
int flag=;
for(int i=;prime[i]<n;i++)//遍历素因子
{
long long sum=;
for(int j=ans-;j>=;j--)
{
sum=(sum*+a[j])%prime[i];
}
if(sum==)
{
printf("BAD %d\n",prime[i]);
flag=;
break;
}
}
if(flag==)
{
printf("GOOD\n");
}
}
}
												

POJ - 2635 E - The Embarrassed Cryptographer的更多相关文章

  1. POJ 2635 The Embarrassed Cryptographer

    大数取MOD... The Embarrassed Cryptographer Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 1 ...

  2. [ACM] POJ 2635 The Embarrassed Cryptographer (同余定理,素数打表)

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

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

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

  4. (POJ2635)The Embarrassed Cryptographer(大数取模)

    The Embarrassed Cryptographer Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 13041 Accep ...

  5. POJ2635——The Embarrassed Cryptographer(高精度取模+筛选取素数)

    The Embarrassed Cryptographer DescriptionThe young and very promising cryptographer Odd Even has imp ...

  6. poj2635The Embarrassed Cryptographer(同余膜定理)

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

  7. HDU 2303 The Embarrassed Cryptographer

    The Embarrassed Cryptographer 题意 给一个两个素数乘积(1e100)K, 给以个数L(1e6), 判断K的两个素数是不是都大于L 题解 对于这么大的范围,素数肯定是要打表 ...

  8. poj 2635 The Embarrassed Cryptographer(数论)

    题目:http://poj.org/problem?id=2635 高精度求模  同余模定理. 题意: 给定一个大数K,K是两个大素数的乘积的值.再给定一个int内的数L 问这两个大素数中最小的一个是 ...

  9. POJ 2635 The Embarrassed Cryptographer 大数模

    题目: http://poj.org/problem?id=2635 利用同余模定理大数拆分取模,但是耗时,需要转化为高进制,这样位数少,循环少,这里转化为1000进制的,如果转化为10000进制,需 ...

随机推荐

  1. Zabbix安装(debian,centos)

    lnmp和lamp架构搭建一键安装脚本下载地址:https://lnmp.org/download.html  https://github.com/teddysun/lamp/tree/master ...

  2. android -------- 错误Attribute application@allowBackup value=(true) from AndroidManifest.xml

    开发中遇到一个问题,运行项目时,出现了一个这如下这样的问题 问题: Manifest merger failed : Attribute application@allowBackup value=( ...

  3. android-------- 多渠道打包(借助友盟移动统计分析)

    好久没有发博客了,原因是换工作了,今天端午假期,所以来发一篇博客, 多渠道打包,借助友盟移动统计分析,希望对各位有所帮助 多渠道打包的理解: 渠道包就是要在安装包中添加渠道信息,也就是channel, ...

  4. 大div中嵌套小div,点击大div时隐藏,点击小div不隐藏

    给小div添加一个click事件 <div onClick="event.cancelBubble = true">  //小div

  5. Matlab-5:牛顿迭代法工具箱

    function [f,L]=Newton(f,a) %this is newton teration whic is used for solving implicit One-dimensiona ...

  6. js对象合并

    实现js对象大合并,ES6之前就只有循环遍历咯.可以用ES6的话可以用Object.assign(). 以下是Object.assign()示例: var o1 = { a: 1 }; var o2 ...

  7. 函数使用八:BP_EVENT_RAISE

    此函数是关联触发一个已经定义的事件,这个事件可以放到SM36里设置JOB,这样就做成了一个事件触发JOB的东西. Import EVENTID                    事件ID ,对应S ...

  8. Github的gitignore

    Git Bash Here的时候自动产生一个.gitignore文件,.gitignore文件的作用上让没有track,也就是没有被add的,如果想ignore已经track的,用git rm --c ...

  9. postgresql install 报错

    install.pm could not copy postgres.exe to ... 错误原因:目标文件夹的父目录不存在

  10. 音频 API 一览

    iOS 和 OS X 平台都有一系列操作音频的 API,其中涵盖了从低到高的全部层级.随着时间的推移.平台的增长以及改变,不同 API 的数量可以说有着非常巨大的变化.本文对当前可以使用的 API 以 ...