关闭

poj 2635 The Embarrassed Cryptographer(同余模运算)

164人阅读 评论(0) 收藏 举报
分类:

http://poj.org/problem?id=2635

题意:给出一个大数K和一个数L,判断是否存在一个小于L的素数能够整除K,存在的话输出最小的那个素数

同余定理:1234%3可以分解为

1%3=1

(1*10+2)%3=0

(0*10+3)%3=0

(0*10+4)%3=1

则1234对3取余得1,大数亦如此,但是本题中需要将这个大数分为多个1000进制的数,10进制的话会TLE

#include <iostream>
#include <queue>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <cstdlib>
#include <limits>
#include <stack>
#include <vector>
#include <map>

using namespace std;

#define N 1000200
#define INF 0xfffffff
#define PI acos (-1.0)
#define EPS 1e-8
#define met(a, b) memset (a, b, sizeof (a))

typedef long long LL;

int isprim[N] = {1, 1}, prim[N], a[N], k = 0;

void Init ()
{
    for (int i=2; i<N; i++)
    {
        if (!isprim[i])
        {
            prim[k++] = i;

            for (int j=i+i; j<N; j+=i)
                isprim[j] = 1;
        }
    }
}

int main ()
{
    char str[N];
    int m;

    Init();

    while (scanf ("%s %d", str, &m), strcmp("0", str) || m)
    {
        met (a, 0);
        int cnt = 0, len = strlen(str);
        int i = len-1;

        while (i>=0)
        {///将字符串中的数以1000进制的形式倒着存入a数组中
            ///1 234 567存为a[567][234][1]
            if (i-2>=0)
            {
                a[cnt] = (str[i-2]-'0')*100+(str[i-1]-'0')*10+str[i]-'0';
                i -= 3;
            }
            else if (i-1>=0)
            {
                a[cnt] = (str[i-1]-'0')*10+str[i]-'0';
                i -= 2;
            }
            else a[cnt] = str[i--]-'0';
            cnt++;
        }

        int flag = 0;

        for (i=0; i<k; i++)
        {
            if (prim[i] >= m) break;

            LL mod = 0;
            for (int j=cnt-1; j>=0; j--)
                mod = (mod * 1000 + a[j]) % prim[i];

            if (!mod)
            {
                printf ("BAD %d\n", prim[i]);
                flag = 1;
                break;
            }
        }
        if (!flag) puts ("GOOD");
    }
    return 0;
}


1
0
查看评论

POJ - 2635 The Embarrassed Cryptographer

给定一个大数K, K是两个大素数的乘积的值。 再给定一个int内的数L 问这两个大素数中最小的一个是否小于L, 如果小于则输出这个素数。 用同余模运算+十进制转化为千进制! 我wa和T了14次,因为打表打的太多了,超时了。。 我的具体做法是 假如123456和1234567 千进制...
  • henuyl
  • henuyl
  • 2017-11-02 14:02
  • 25

POJ 2635 The Embarrassed Cryptographer

重要提示:不要在意那个图…… 题目大意: 给一个K,范围0到10的100次方,是由两个素数相乘得出的。 再给出一个数L,范围0到10的6次方。 问相乘出K的两个素数是否都大于L,如果有小于的输出BAD+最小的那个素数,没有输出GOOD。 解题思路: 这其实是个模拟题啊……...
  • lin375691011
  • lin375691011
  • 2013-12-27 20:48
  • 4328

POJ 2635 The Embarrassed Cryptographer (同余问题)

Description The young and very promising cryptographer Odd Even has implemented the security module of a large system with thousands of users, which...
  • qq_28954601
  • qq_28954601
  • 2017-01-17 14:42
  • 186

【POJ 2635】 The Embarrassed Cryptographer

【POJ 2635】 The Embarrassed Cryptographer 考查素数表就好好玩素数表……卡mod算啥= =TOT 总之 就是敲个表 暴力枚举取余 一发十进制取余(即*10+%TLE……) 看disscuss才知道mod多了影响很大 改成高进制取(既多累几位再取) 98...
  • ChallengerRumble
  • ChallengerRumble
  • 2015-08-19 21:47
  • 447

POJ 2635 The Embarrassed Cryptographer (同余线性方程+素数筛)

题目地址:POJ 2635 先用素数筛把10^6万以内素数筛出来。然后把输入的那个大数转化成数组,并且每三位存成一个数,这样可以节约内存和时间,然后利用同余线性的原理,对那个小整数以内的所有素数枚举,然后判断是否整除,找到最小的能被整除的。 代码如下: #include #include ...
  • u013013910
  • u013013910
  • 2015-01-22 22:47
  • 682

poj 2635 The Embarrassed Cryptographer

题目链接:http://poj.org/problem?id=2635 思路:当看到K的最大值为 10100 的第一想法就是用java打大数,建立一个素数表,然后再在素数表中去找,看是否有符合条件的。 code: import java.math.*; import java...
  • u010304217
  • u010304217
  • 2014-07-24 23:02
  • 769

poj 2635 The Embarrassed Cryptographer

//大数取模 //题意 输入大数K 和小数L, 判断是否存在小于L的质数能整除K //先写了1000进制的发现比较慢,然后改成10^11进制,快了许多 #include #include #include #include using namespace std;
  • taozifish
  • taozifish
  • 2011-08-25 13:20
  • 222

POJ 2635 The Embarrassed Cryptographer

大数取MOD。。。The Embarrassed CryptographerTime Limit: 2000MSMemory Limit: 65536KTotal Submissions: 11359Accepted: 3026DescriptionThe y...
  • u012797220
  • u012797220
  • 2014-11-04 11:23
  • 308

POJ 2635 The Embarrassed Cryptographer

The Embarrassed Cryptographer Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 11984 Accepted: 3196 Description The young and ve...
  • u014688855
  • u014688855
  • 2014-07-21 09:48
  • 956

E - The Embarrassed Cryptographer POJ - 2635

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...
  • Jack_zhuiyi
  • Jack_zhuiyi
  • 2017-12-04 19:59
  • 27
    个人资料
    • 访问:80317次
    • 积分:3566
    • 等级:
    • 排名:第10992名
    • 原创:277篇
    • 转载:6篇
    • 译文:0篇
    • 评论:17条
    最新评论