版权声明:本文为博主原创文章,未经博主同意不得转载。 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的更多相关文章

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

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

  2. POJ2635(数论+欧拉筛+大数除法)

    题目链接:https://vjudge.net/problem/POJ-2635 题意:给定一个由两个质数积的大数M和一个数L,问大数M的其中较小的质数是否小于L. 题解:因为大数M已经超过long ...

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

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

  4. poj2635 同余定理 + 素数筛法

    题意:给定一个数,这个数是两个素数的乘积,并给定一个限制L,问是否两个素数中存在小于L的数,若存在输出较小质数,否则打印'GOOD'. 思路: 1 . x = a * b, a和b都是素数,那么x只能 ...

  5. poj2635(千进制取模+同余模定理)

    题目链接:https://www.cnblogs.com/kuangbin/archive/2012/04/01/2429463.html 题意:给出大数s (s<=10100) ,L (< ...

  6. poj题目

    poj2965 poj1753:标准的BFS+位运算优化 poj1328:线段覆盖变种,把圆对应到线段上,贪心求解 poj2109:高精度开根,二分+高精度,注意要判断答案的位数,如果按照题目给的范围 ...

  7. poj分类 很好很有层次感。

    初期: 一.基本算法:      (1)枚举. (poj1753,poj2965)      (2)贪心(poj1328,poj2109,poj2586)      (3)递归和分治法.      ( ...

  8. 【转】POJ题目分类推荐 (很好很有层次感)

    OJ上的一些水题(可用来练手和增加自信) (poj3299,poj2159,poj2739,poj1083,poj2262,poj1503,poj3006,poj2255,poj3094)初期: 一. ...

  9. 【转】ACM训练计划

    [转] POJ推荐50题以及ACM训练方案 -- : 转载自 wade_wang 最终编辑 000lzl POJ 推荐50题 第一类 动态规划(至少6题, 和 必做) 和 (可贪心) (稍难) 第二类 ...

随机推荐

  1. Spring Boot Docker 实战

    Spring Boot Docker 开发环境 开发工具: Intellij IDEA 2018.2.6 springboot: 2.0.6.RELEASE jdk: 1.8.0_192 maven: ...

  2. springboot调优

    application.properties server.tomcat.max-connections=0 # Maximum number of connections that the serv ...

  3. Javascript继承1:子类的的原型对象----类式继承

    //声明父类 function Parent(){ this.parentValue = true; this.favorites = ['看书'] } //为父类添加公有方法 Parent.prot ...

  4. Java Cookie工具类

    1.Cookie跨域 Cookie不能跨顶级域名访问,但是二级域名可以共享Cookie,所以要实现跨域,有一定的局限性. 2.代码 package com.DingYu.Cookie; import ...

  5. 【软工神话】第四篇(Alpha冲刺)

    前言:咳咳,一个多月了,最近忙这忙那,都把这个故事给落下了,昨晚刚回到家,白天得干活,晚上赶紧把这个故事写完,以此纪念自己的软工. 说明:故事中的人物均是化名,故事情节经过些许加工,故事情节并没有针对 ...

  6. Atom插件安装及推荐

    简介(了解更多去google或baidu) Atom 代码编辑器支持 Windows.Mac.Linux 三大桌面平台,完全免费,并且已经在 GitHub 上开放了全部的源代码.在经过一段长时间的迭代 ...

  7. Human Motion Analysis with Wearable Inertial Sensors——阅读1

    Human Motion Analysis with Wearable Inertial Sensors——阅读 博主认为对于做室内定位和导航的人这是一篇很很棒的文章,不是他的技术很牛,而是这是一篇医 ...

  8. Testlink1.9.17使用方法(第九章 测试结果分析)

    第九章 测试结果分析 QQ交流群:585499566 TestLink根据测试过程中记录的数据,提供了较为丰富的度量统计功能,可以直观的得到测试管理过程中需要进行分析和总结的数据.点击首页横向导航栏中 ...

  9. Centos 7 查看内存占用情况相关命令

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/80652626 本文出自[赵彦军的博客] 1. top命令 top命令经常用来监控l ...

  10. [转] Vue生命周期

    Vue生命周期 这是Vue文档里关于实例生命周期的解释图 那么下面我们来进行测试一下 <section id="app-8"> {{data}} </sectio ...