sicily 1231. The Embarrassed Cryptography

原创 2015年11月19日 13:00:58

1231. The Embarrassed Cryptography

Constraints

Time Limit: 2 secs, Memory Limit: 32 MB

Description

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 <= 10100 and 2 <= L <= 106. 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

题目分析

给定一个大整数和num,看大整数能否被比num小的素数整除
大整数除法,利用同余定理

#include <stdio.h>
#include <memory.h>
int prime[80000];
int count;

void init() {
  int visited[1000005];
  memset(visited, true, sizeof(visited));
  for (int c = 2; c < 1000005; ++c)
    if (visited[c])
      for (int d = c + c; d < 1000005; d += c)
        visited[d] = false;

  count = 0;
  for (int c = 2; c < 1000005; ++c)
    if (visited[c])
      prime[count++] = c;
}

int main()
{
  init();
  char key[101];
  int test;
  while (scanf("%s%d", key, &test)) {
    if (key[0] == '0' && test == 0)
      break;

    int hope = 0;
    for (int c = 0; prime[c] < test; ++c) {
      int temp = 0;
      for (int d = 0; d < strlen(key); ++d) {
        temp = (temp * 10) + (key[d] - '0');
        temp %= prime[c];
      }

      if (temp == 0) {
        hope = prime[c];
        break;
      }
    }
    if (hope)
      printf("BAD %d\n", hope);
    else
      printf("GOOD\n");
  }

  return 0;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Sicily 1231. The Embarrassed Cryptography【高精度取余】

题目链接在此 启示 1 用筛选法构造质数表; 启示 2 memset函数是以字节为单位操作数组的,对于char型数组,第二个参数怎样设置都行,因为每个char刚好就1个字节。但对于int型数组,就...

Sicily1231. The Embarrassed Cryptography

1231. The Embarrassed Cryptography Constraints Time Limit: 2 secs, Memory Limit: 32 MB De...

POJ2635--The Embarrassed Cryptographer--大数取模

Description The young and very promising cryptographer Odd Even has implemented the security module...
  • a305657
  • a305657
  • 2013年04月01日 18:22
  • 541

HDU 2303 The Embarrassed Cryptographer

大数因子,素数筛选。

poj 2635 The Embarrassed Cryptographer

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

poj The Embarrassed Cryptographer(大数取模)(同余模定理)

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

POJ -2635-The Embarrassed Cryptographer-数论

题意:   给你一个数n,k,如果n有小于k的素数因子,就输出,没有的话输出GOOD 思路:   求一个10^100 的K 对 小于 10^6的 L 取余,问2-L-1 之间能否有能整除K的素...

POJ2635-The Embarrassed Cryptographer

  • 2011年07月31日 23:10
  • 19KB
  • 下载

炫彩电子商务平台 v1.5.3 bulid1231

  • 2013年12月31日 17:50
  • 3.8MB
  • 下载

POJ 2635 The Embarrassed Cryptographer

The Embarrassed Cryptographer Time Limit: 2000MS   Memory Limit: 65536K Total Submis...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:sicily 1231. The Embarrassed Cryptography
举报原因:
原因补充:

(最多只允许输入30个字)