大整数求模的问题
打一个素数的表
将十进制转化为千进制。
#include "stdio.h"
#include "string.h"
#define MAX 1000100
void primetable(void);
int mod(int k[] , long int p , long int len);
long int prime[1000101];
int main()
{
char K[10000];
int K_1000[10000];
int L , len , i , pos , len_1000 , index , flag = 1;
primetable();
while(scanf("%s%d",K,&L) && L)
{
memset(K_1000,0,sizeof(K_1000));
len = strlen(K);
for( i = 0 ; i < len ; i++ )
{
pos = (len + 2 - i)/3 - 1;
K_1000[pos] = K_1000[pos]*10 + (K[i] - '0');
}
len_1000 = (len + 2)/3;
index = 0;
while(prime[index] < L)
{
if(!mod(K_1000,prime[index],len_1000))
{
flag = 0 ;
printf("BAD %ld\n",prime[index]);
break;
}
index++;
}
if(flag)
printf("GOOD\n");
}
return 0 ;
}
void primetable(void)
{
long int index = 0;
long int i , j;
int flag;
prime[index++] = 2;
for( i = 3 ; i < MAX ; i += 2 )
{
flag = 1;
for( j = 0 ; prime[j]*prime[j] <= i ; j++)
{
if( !(i % prime[j]) )
{
flag = 0;
break;
}
}
if( flag )
prime[index++] = i;
}
}
int mod(int k[] , long int p , long int len)
{
long int i , j = 0 , m;
for( m = len - 1 ; m >= 0 ; m-- )
j = (j*1000 + k[m])%p ;
if(!j) //±»Õû3y
return 0;
else
return 1;
}