poj 2635
2015-01-25 14:43
127 查看
http://poj.org/problem?id=2635
好久之前看过的一道题,不过一直没有什么思路, 然后突然想起来, 看了下解题报告, 真的很佩服他们
10^100太大我们就改成用1000进制存的, 然后用同余模定理
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <cmath>
#include <string.h>
using namespace std;
int knum[1111];
char num[1111];
int prime[1000100];
void PrimeTable( )
{
int cnt = 0;
prime[cnt++] = 2;
for( int i = 3; i < 1000100; i++)
{
bool flag = false;
for( int j = 0; prime[j]*prime[j] <= i; j++)
{
if(i%prime[j] == 0)
{
flag = true;
break;
}
}
if(!flag)
prime[cnt++] = i;
}
}
bool check( int pos, int len)
{
int mod = 0;
for( int i = len-1; i >= 0; i--)
mod = (mod * 1000 + knum[i])%prime[pos];
if(mod)
return false;
return true;
}
void solve()
{
int k;
while(scanf("%s%d",&num, &k) != EOF && k)
{
int len = strlen(num);
int bit = 0;
for( int i = len - 1; i >= 0; i-=3)
{
int res = (num[i]-'0') ;
if(i-1>=0)
res += (num[i-1]-'0')*10 ;
if(i-2>=0)
res += (num[i-2]-'0')*100;
knum[bit++] = res;
}
bool flag = false;
int pos = 0;
while(prime[pos] < k)
{
if(check(pos,bit))
{
printf("BAD %d\n",prime[pos]);
flag = true;
break;
}
pos++;
}
if(!flag)
printf("GOOD\n");
}
}
int main()
{
PrimeTable();
solve();
return 0;
}
好久之前看过的一道题,不过一直没有什么思路, 然后突然想起来, 看了下解题报告, 真的很佩服他们
10^100太大我们就改成用1000进制存的, 然后用同余模定理
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <cmath>
#include <string.h>
using namespace std;
int knum[1111];
char num[1111];
int prime[1000100];
void PrimeTable( )
{
int cnt = 0;
prime[cnt++] = 2;
for( int i = 3; i < 1000100; i++)
{
bool flag = false;
for( int j = 0; prime[j]*prime[j] <= i; j++)
{
if(i%prime[j] == 0)
{
flag = true;
break;
}
}
if(!flag)
prime[cnt++] = i;
}
}
bool check( int pos, int len)
{
int mod = 0;
for( int i = len-1; i >= 0; i--)
mod = (mod * 1000 + knum[i])%prime[pos];
if(mod)
return false;
return true;
}
void solve()
{
int k;
while(scanf("%s%d",&num, &k) != EOF && k)
{
int len = strlen(num);
int bit = 0;
for( int i = len - 1; i >= 0; i-=3)
{
int res = (num[i]-'0') ;
if(i-1>=0)
res += (num[i-1]-'0')*10 ;
if(i-2>=0)
res += (num[i-2]-'0')*100;
knum[bit++] = res;
}
bool flag = false;
int pos = 0;
while(prime[pos] < k)
{
if(check(pos,bit))
{
printf("BAD %d\n",prime[pos]);
flag = true;
break;
}
pos++;
}
if(!flag)
printf("GOOD\n");
}
}
int main()
{
PrimeTable();
solve();
return 0;
}
相关文章推荐
- poj 2635
- POJ 2635 The Embarrassed Cryptographer 线性筛+高精度取模
- poj 2635 高精度+素数
- POJ 2635
- The Embarrassed Cryptographer POJ 2635 数论之高精度求模(同余模定理+千进制)
- [ACM] POJ 2635 The Embarrassed Cryptographer (同余定理,素数打表)
- poj 2635 The Embarrassed Cryptographer
- The Embarrassed Cryptographer--POJ 2635
- POJ 2635 The Embarrassed Cryptographer
- poj 2635
- POJ 2635.The Embarrassed Cryptographer
- E - The Embarrassed Cryptographer POJ - 2635
- poj 2635 The Embarrassed Cryptographer ——高精度取模
- poj(2635 大数取模)
- poj2635
- POJ 2635 N进制大数与小数取模
- POJ2635 The Embarrassed Cryptographer 简单数论
- poj2635--The Embarrassed Cryptographer(数论篇1,大数取模)
- poj2635
- POJ 2635 The Embarrassed Cryptographer 高精度