POJ 2635 The Embarrassed Cryptographer(大数求余)
题意:给出一个大数,这个大数由两个素数相乘得到,让我们判断是否其中一个素数比L要小,如果两个都小,输出较小的那个。
分析:大数求余的方法:针对题目中的样例,143 11,我们可以这样算,1 % 11 = 1; 1×10 + 4 % 11 = 3; 3×10 + 3 % 11 = 0;我们可以把大数拆成小数去计算,同余膜定理保证了这个算法的这正确性,而且我们将进制进行一定的扩大也是正确的。
注意:素数打标需要优化,否则超时。 进制需要适当,100和1000都可以,10进制超时,10000以上WA(不知道为什么……)。 把进制扩大以后,数据必须从后向前存,从前向后存的不是原数。
总结:这个题目卡时间卡的特别紧;
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
#define maxn 1000010
#define jz 1000
int prime[maxn],tot,List[maxn];
void make_prime()
{
for(int i = ; i <= maxn-; i++)
{
prime[i] = ;
}
prime[] = prime[] = ;
int d = sqrt((double)maxn) + ;
for(int i = ; i <= maxn-; i++)
{
if(!prime[i]) continue;
List[tot++] = i;
if(i > d) continue;
for(int j = *i; j <= maxn-; j += i)
{
prime[j] = ;
}
}
}
int mypow(int x,int y)
{
int sum = ;
for(int i = ; i <= y; i++)
sum *= x;
return sum;
}
int main()
{
tot = ;
make_prime();
char str[];
int l,lens,a[],ans,num,jw,cnt,number,tot1;
while(~scanf("%s%d",str,&l))
{
if(str[] == '' && l == ) break;
lens = strlen(str);
cnt = ;
number = ;
tot1 = ;
for(int i = lens-; i >= ; i--)
{
num = str[i] - '';
number += num * mypow(,cnt);
// printf("number = %d\n",number);
cnt++;
if(cnt == )
{
cnt = ;
a[tot1++] = number;
number = ;
}
}
if(number) a[tot1++] = number;
bool flag = true;
for(int i = ; i < tot; i++)
{
jw = ;
num = List[i];
if(num >= l) break;
for(int j = tot1-; j >= ; j--)
{
jw = (jw*jz + a[j]) % num;
}
if(jw == )
{
flag = false;
ans = num;
break;
}
}
if(flag)
{
puts("GOOD");
}
else printf("BAD %d\n",ans);
memset(a,,sizeof(a));
memset(str,,sizeof(str));
}
return ;
}
POJ 2635 The Embarrassed Cryptographer(大数求余)的更多相关文章
- [ACM] POJ 2635 The Embarrassed Cryptographer (同余定理,素数打表)
The Embarrassed Cryptographer Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 11978 A ...
- POJ 2635 The Embarrassed Cryptographer 大数模
题目: http://poj.org/problem?id=2635 利用同余模定理大数拆分取模,但是耗时,需要转化为高进制,这样位数少,循环少,这里转化为1000进制的,如果转化为10000进制,需 ...
- POJ2635-The Embarrassed Cryptographer 大数求余
题目链接:http://poj.org/problem?id=2635 题目分析: http://blog.csdn.net/lyy289065406/article/details/6648530
- POJ 2635 The Embarrassed Cryptographer (千进制,素数筛,同余定理)
The Embarrassed Cryptographer Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 15767 A ...
- POJ - 2635 The Embarrassed Cryptographer(千进制+同余模)
http://poj.org/problem?id=2635 题意 给一个大数K,K一定为两个素数的乘积.现给出一个L,若K的两个因子有小于L的,就输出BAD,并输出较小的因子.否则输出GOOD 分析 ...
- POJ 2635 The Embarrassed Cryptographer
大数取MOD... The Embarrassed Cryptographer Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 1 ...
- poj 2635 The Embarrassed Cryptographer(数论)
题目:http://poj.org/problem?id=2635 高精度求模 同余模定理. 题意: 给定一个大数K,K是两个大素数的乘积的值.再给定一个int内的数L 问这两个大素数中最小的一个是 ...
- POJ 2635 The Embarrassed Cryptographer 高精度
题目地址: http://poj.org/problem?id=2635 题意:给出一个n和L,一直n一定可以分解成两个素数相乘. 让你判断,如果这两个素数都大于等于L,则输出GOOD,否则输出最小的 ...
- (POJ2635)The Embarrassed Cryptographer(大数取模)
The Embarrassed Cryptographer Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 13041 Accep ...
随机推荐
- [ An Ac a Day ^_^ ] hdu 1003 dp
超时还有可能是数组开小了…… #include<stdio.h> #include<iostream> #include<algorithm> #include&l ...
- xampp 搭建 web mac上
1.安装 2.修改数据库密码,删除phpmyadmin ,用navicat 控制数据库 3.修改/Applications/XAMPP/xamppfiles/etc/extra/httpd-vhos ...
- @+android:id的一些记录
在修改Settings模块的APN列表时,遇到了类似标题中的一些写法. 在网上查了一下: 加上android:表示引用android.R.id里面定义的id资源,如果android.R.id里面确实有 ...
- ubuntu下的ssh工具gstm
(转自:http://www.nenew.net/ubuntu-ssh-gstm.html) 首先安装: sudo apt-get install gstm 就可以安装,当然你也可以到http://s ...
- 使用SpringMVC时,配置DispatcherServlet注意的url-pattern的问题
url-pattern配置时注意: <!--springMVC配置--><servlet> <servlet-name>springMVC</servlet- ...
- Python 学习笔记8
在最想放弃的时候 想想美好的事情 想想明天. 今天继续看错误与异常. http://www.pythondoc.com/pythontutorial3/errors.html
- socket通信实例
ref: http://www.cnblogs.com/xudong-bupt/archive/2013/12/29/3483059.html http://blog.csdn.net/love_ga ...
- 对端口Com1的访问被拒绝
某项目中,需通过com口的方式读取CF卡的rfid,. 问题:当我关闭模块,然后第二次打该模块时,弹出如下错误”对端口Com1的访问被拒绝”(编程这一行业,不是找不到对象,就是被xxx拒绝!): 断点 ...
- iOS可变字符串的所有操作
可直接把代码复制即可结合输出看结果加深记忆 //创建一个可变字符串 NSMutableString * ms1 = [[NSMutableString alloc]init]; //可以通过类方法来创 ...
- Apriori算法-java
package com.yang; import java.util.*; public class Apriori { private double minsup = 0.2;// 最小支持度 ...