题意:
给你一个数n,k,如果n有小于k的素数因子,就输出,没有的话输出GOOD
思路:
求一个10^100 的K 对 小于 10^6的 L 取余,问2-L-1 之间能否有能整除K的素数。
设k=a0a1a2a3a4a5a6a7a8a9a10.
k % m =a0a1a2a3a4a5a6*1000 %m + a7a8a9a10%m
=(a0a1a2*1000 %m + a3a4a5a6)*1000 %m + a7a8a9a10%m
于是很明显可以递归求解,k%m
于是枚举m,每次求解k就好了。。。。
注意素数打表的时候用j=i+i!!!
还有如果用as==0判断结果的时候注意可能l太小(l==2)而不进入循环,导致as未初始化,
所以as要初始化为1.
CODE 1010ms
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<string.h>
#include<iostream>
#define MAX 1000100
using namespace std;
int prime[MAX];
bool ls[MAX];
int top;
void makeprime()///素数
{
int i, j;
top = 0;
for(i = 2; i <MAX;i++)
{
if(!ls[i])
{
prime[top++] = i;
for(j =i+i;j < MAX;j+=i)
ls[j] = i;
}
}
prime[top] = MAX;
}
int main()
{
makeprime();
char s[150];
int k;
while(~scanf("%s%d",s,&k)&&k)
{
int len = strlen(s);
int io = len%5;
int num = 0, i;
for(i = 0; i < io; i++)
num=(num+s[i]-'0')*10;
num/=10;
int as = 1,j;
for(j = 0;prime[j] < k; j++)///10000进制
{
int pm = prime[j];
as = num%pm;
for(i = io; i < len;i+=5)
{
as=((long long)as*100000+(s[i]-'0')*10000+(s[i+1]-'0')*1000+(s[i+2]-'0')*100+(s[i+3]-'0')*10 + (s[i+4]-'0'))%pm;
}
if(as == 0)
{
printf("BAD %d\n",pm);
break;
}
}
if(as)
{
printf("GOOD\n");
}
}
return 0;
}
数据:
Sample Input
143 10
143 20
667 20
667 30
2573 30
2573 40
4 2
6 3
6 3
15 3
9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999536689 2
9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999536689 3
9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999536689 999981
9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999536689 999982
9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999536689 999983
9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999536689 999984
9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999536689 999985
9936798836621706335903766366605021199756127575438907144689843371764114998372849970522970722679648297 1000000
9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999924165887 1000000
9999999999999999997709341477512928270733515750111494296807693217401592660013176273247584305454312971 1000000
9999999999988881245087379264540384030358544520360773252628174690915590034078934845096473005364364269 1000000
9999999999999999999999999999999999999999999999999999999999999999999997947710886296926452585995644787 1000000
9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999998743929569 1000000
9999999999999999999999999999999999999999999999999999999999999999999999996406876316697599258447653751 1000000
9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999995271511 1000000
9999664515006205757944572422495695942633452678405393581216966782816097132509526872495414067984894021 1000000
0 0
143 10
143 20
667 20
667 30
2573 30
2573 40
4 2
6 3
6 3
15 3
9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999536689 2
9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999536689 3
9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999536689 999981
9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999536689 999982
9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999536689 999983
9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999536689 999984
9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999536689 999985
9936798836621706335903766366605021199756127575438907144689843371764114998372849970522970722679648297 1000000
9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999924165887 1000000
9999999999999999997709341477512928270733515750111494296807693217401592660013176273247584305454312971 1000000
9999999999988881245087379264540384030358544520360773252628174690915590034078934845096473005364364269 1000000
9999999999999999999999999999999999999999999999999999999999999999999997947710886296926452585995644787 1000000
9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999998743929569 1000000
9999999999999999999999999999999999999999999999999999999999999999999999996406876316697599258447653751 1000000
9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999995271511 1000000
9999664515006205757944572422495695942633452678405393581216966782816097132509526872495414067984894021 1000000
0 0
Sample Output
GOOD
BAD 11
GOOD
BAD 23
GOOD
BAD 31
GOOD
BAD 2
BAD 2
GOOD
GOOD
GOOD
GOOD
GOOD
GOOD
BAD 999983
BAD 999983
BAD 587
BAD 100043
GOOD
GOOD
GOOD
GOOD
GOOD
BAD 16603
BAD 9103
GOOD
BAD 11
GOOD
BAD 23
GOOD
BAD 31
GOOD
BAD 2
BAD 2
GOOD
GOOD
GOOD
GOOD
GOOD
GOOD
BAD 999983
BAD 999983
BAD 587
BAD 100043
GOOD
GOOD
GOOD
GOOD
GOOD
BAD 16603
BAD 9103