poj2635
版权声明:本文为博主原创文章,未经博主同意不得转载。 https://blog.csdn.net/chaoweilanmao/article/details/33417423
这道题一看是大数题就知道不会做。就看了一下其它人的解题报告,千篇一律的做法:
首先把大数变成千进制数用整形数组存起来,事实上所谓千进制就是每三位数当作一位数处理。
然后从小到大枚举全部小于L的素数。用同余模的各种知识对这个转换后的千进制数进行求余,这个所谓同余模处理,事实上就是。设两个正整数a,b,c,有(a+b)%c=(a%c+b)%c,至于证明的话,
我不会。
最后呢,假设余数为0那么输出BAD 比L小的K质因子。假设不是的话,输出GOOD。
嗯,这样做就好了。至于为毛是千进制。事实上百进制,十进制都能够,用整形数组存起来表示即可了,不过千进制在这里是进行求余过程最优的方法,由于能使求余次数最少。那么为毛不能用万进制,由于会超精的。为毛?由于你想L最大是10的6次方,比它小的素数最大是有6位数的,于是每次对数组里面的每一个元素取完一次余,得到的最大余数最大也是有6位数的,于是之后
假设是万进制就要乘以10的4次方加上后面的数组元素,于是最多就会有10位数,int能表示的最大数是2的十次方的样子多一点,当然这里假设用long long的话是能够用万进制的,由于他们都是用千进制。所以。我不只用千进制的方法写了。还用万进制的方法写了。
附上千进制和万进制的两种做法的代码,事实上几乎相同,例如以下:
#include<iostream>
#include<cstring>
using namespace std;
int prime[1000000],sushu,l,num[110],shumu;
char k[110];
bool isprime(int x)
{
int i;
if(x%2==0)
return 0;
for(i=0;prime[i]*prime[i]<=x;i++)
if(x%prime[i]==0)
return 0;
return 1;
}
void makeprime()
{
int i;
prime[0]=2;
for(sushu=1,i=3;;i++)
if(isprime(i))
{
prime[sushu++]=i;
if(i>=1000000)
break;
}
}
void makenum()
{
bool flag=1;
int s,e,i,n=strlen(k),j,sum;
shumu=0;
for(e=n-1;flag;e=s-1)
{
if(e-2<=0)
{
s=0;
flag=0;
}
else
s=e-2;
sum=0;
for(j=s;j<=e;j++)
sum=sum*10+(k[j]-'0');
num[shumu++]=sum;
}
}
void iscunzai()
{
makenum();
int i,j,r;
for(i=0;prime[i]<l;i++)
{
r=0;
for(j=shumu-1;j>-1;j--)
r=(r*1000+num[j])%prime[i];
if(r==0)
{
printf("BAD %d\n",prime[i]);
return;
}
}
printf("GOOD\n");
}
int main()
{
makeprime();
while(scanf("%s%d",k,&l)&&(k[0]!='0'||l!=0))
{
iscunzai();
}
}
#include<iostream>
#include<cstring>
using namespace std;
int prime[1000000],sushu,l,num[110],shumu;
char k[110];
bool isprime(int x)
{
int i;
if(x%2==0)
return 0;
for(i=0;prime[i]*prime[i]<=x;i++)
if(x%prime[i]==0)
return 0;
return 1;
}
void makeprime()
{
int i;
prime[0]=2;
for(sushu=1,i=3;;i++)
if(isprime(i))
{
prime[sushu++]=i;
if(i>=1000000)
break;
}
}
void makenum()
{
bool flag=1;
int s,e,i,n=strlen(k),j,sum;
shumu=0;
for(e=n-1;flag;e=s-1)
{
if(e-3<=0)
{
s=0;
flag=0;
}
else
s=e-3;
sum=0;
for(j=s;j<=e;j++)
sum=sum*10+(k[j]-'0');
num[shumu++]=sum;
}
}
void iscunzai()
{
makenum();
int i,j;
long long r;
for(i=0;prime[i]<l;i++)
{
r=0;
for(j=shumu-1;j>-1;j--)
r=(r*10000+num[j])%prime[i];
if(r==0)
{
printf("BAD %d\n",prime[i]);
return;
}
}
printf("GOOD\n");
}
int main()
{
makeprime();
while(scanf("%s%d",k,&l)&&(k[0]!='0'||l!=0))
{
iscunzai();
}
}
另外从这里http://blog.csdn.net/lyy289065406/article/details/6648530学到了一个推断素数的比較快的方法,就是首先推断这个数是不是偶数,假设不是再枚举小于或等于这个数的平方根的素数,看是不是能够使这个数被整除。假设再不是,那么这个数肯定是素数了。
poj2635的更多相关文章
- POJ2635——The Embarrassed Cryptographer(高精度取模+筛选取素数)
The Embarrassed Cryptographer DescriptionThe young and very promising cryptographer Odd Even has imp ...
- POJ2635(数论+欧拉筛+大数除法)
题目链接:https://vjudge.net/problem/POJ-2635 题意:给定一个由两个质数积的大数M和一个数L,问大数M的其中较小的质数是否小于L. 题解:因为大数M已经超过long ...
- (POJ2635)The Embarrassed Cryptographer(大数取模)
The Embarrassed Cryptographer Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 13041 Accep ...
- poj2635 同余定理 + 素数筛法
题意:给定一个数,这个数是两个素数的乘积,并给定一个限制L,问是否两个素数中存在小于L的数,若存在输出较小质数,否则打印'GOOD'. 思路: 1 . x = a * b, a和b都是素数,那么x只能 ...
- poj2635(千进制取模+同余模定理)
题目链接:https://www.cnblogs.com/kuangbin/archive/2012/04/01/2429463.html 题意:给出大数s (s<=10100) ,L (< ...
- poj题目
poj2965 poj1753:标准的BFS+位运算优化 poj1328:线段覆盖变种,把圆对应到线段上,贪心求解 poj2109:高精度开根,二分+高精度,注意要判断答案的位数,如果按照题目给的范围 ...
- poj分类 很好很有层次感。
初期: 一.基本算法: (1)枚举. (poj1753,poj2965) (2)贪心(poj1328,poj2109,poj2586) (3)递归和分治法. ( ...
- 【转】POJ题目分类推荐 (很好很有层次感)
OJ上的一些水题(可用来练手和增加自信) (poj3299,poj2159,poj2739,poj1083,poj2262,poj1503,poj3006,poj2255,poj3094)初期: 一. ...
- 【转】ACM训练计划
[转] POJ推荐50题以及ACM训练方案 -- : 转载自 wade_wang 最终编辑 000lzl POJ 推荐50题 第一类 动态规划(至少6题, 和 必做) 和 (可贪心) (稍难) 第二类 ...
随机推荐
- mybatis_04 resultType和resultMap区别
resultType 使用resultType进行结果映射时,查询的列名和映射的pojo属性名完全一致,该列才能映射成功. 如果查询的列名和映射的pojo属性名全部不一致,则不会创建pojo对象: 如 ...
- C#设计模式之九组合模式(Composite Pattern)【结构型】
一.引言 今天我们要讲[结构型]设计模式的第四个模式,该模式是[组合模式],英文名称是:Composite Pattern.当我们谈到这个模式的时候,有一个物件和这个模式很像,也符合这个模式要表达的意 ...
- Flask 系列之 LoginManager
说明 操作系统:Windows 10 Python 版本:3.7x 虚拟环境管理器:virtualenv 代码编辑器:VS Code 实验目标 通过使用 flask-login 进行会话管理的相关操作 ...
- 如何实现JavaScript的Map和Filter函数?
译者按: 鲁迅曾经说过,学习JavaScript最好方式莫过于敲代码了! 原文: Master Map & Filter, Javascript’s Most Powerful Array F ...
- jQuery效果之jQuery Color animation 色彩动画扩展
jQuery 的动画方法(animate)支持各种属性的过渡,但是默认并不支持色彩的过渡,该插件正是来补足这一点! PS: 该插件支持 RGBA 颜色的过渡,但是请注意,IE8以下的版本不支持 RGB ...
- [总结]高效的jQuery代码编写技巧
缓存变量 DOM遍历是昂贵的,所以尽量将会重用的元素缓存. // 糟糕 h = $('#element').height(); $('#element').css('height',h-20); // ...
- 初识HTTP协议web开发
HTTP协议 HTTP协议简介 超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式.协作式和超媒体信息系统的应用层协议.HTTP是万维网的 ...
- mybatis 自动生成文件配置
maven 依赖配置: <!-- sql server --><dependency> <groupId>com.microsoft.sqlserver</g ...
- python itchat 爬取微信好友信息
原文链接:https://mp.weixin.qq.com/s/4EXgR4GkriTnAzVxluJxmg 「itchat」一个开源的微信个人接口,今天我们就用itchat爬取微信好友信息,无图言虚 ...
- (网页)HTML中INPUT type="date"标签如何赋值注意问题(转)
现在的html5 input标签支持type="date" 显示有日期的日历控件,一行简单的代码就能显示出一个日历控件,但是有的时候需要给它一个默认的日期值,这个时候可能就要用到v ...