and got accepted. here is my code
Code: Select all
#include<stdio.h>
#define max 20000000
#define lmt 4473
unsigned flag[max>>6];
#define ifc(n) (flag[n>>6]&(1<<((n>>1)&31)))
#define isc(n) (flag[n>>6]|=(1<<((n>>1)&31)))
int power(int prime,int n)
{
int a=n;
int pow=0;
while(a!=0)
{
pow=a/prime+pow;
a=a/prime;
}
return pow;
}
int main()
{
int index[3][4]={{6,2,4,8},{1,3,9,7},{1,7,9,3}};
int i,j,k,n,twos,fives,digittwo,threes,p,sevens,digitthree,digitseven,lastdigit;
for(i=3;i<lmt;i+=2)
if(!ifc(i))
for(j=i*i,k=i<<1;j<max;j+=k)
isc(j);
while(scanf("%d",&n)==1)
{
if(n==0||n==1)
printf("%5d -> 1\n",n);
else
{
twos=power(2,n);
fives=power(5,n);
twos=(twos-fives)%4;
digittwo=index[0][twos];
threes=power(3,n);
sevens=power(7,n);
for(i=11;i<=n;i+=2){
if(!ifc(i))
{
p=i%10;
int c=power(i,n);
if(p==7)
sevens=sevens+c;
else if(p==3)
threes=threes+c;
else if(p==9)
threes=threes+2*c;
}
}
threes=threes%4;
digitthree=index[1][threes];
sevens=sevens%4;
digitseven=index[2][sevens];
lastdigit=(digittwo*digitseven*digitthree)%10;
printf("%5d -> %d\n",n,lastdigit);
}
}
return 0;
}
then i modified this code for 10212. but getting WA.. can anybody help me? :-?
#include<stdio.h>
#define max 20000100
#define lmt 4473
unsigned flag[max>>6];
#define ifc(n) (flag[n>>6]&(1<<((n>>1)&31)))
#define isc(n) (flag[n>>6]|=(1<<((n>>1)&31)))
int power(int prime,int n)
{
int a=n;
int pow=0;
while(a!=0)
{
pow=a/prime+pow;
a=a/prime;
}
return pow;
}
int main()
{
int index[3][4]={{6,2,4,8},{1,3,9,7},{1,7,9,3}};
int i,j,k,n,twos,fives,digittwo,threes,p,sevens,digitthree,digitseven,lastdigit,u;
for(i=3;i<lmt;i+=2)
if(!ifc(i))
for(j=i*i,k=i<<1;j<max;j+=k)
isc(j);
while(scanf("%d %d",&n,&u)==2)
{
if(n==0||n==1||u==0)
printf("1\n");
else if(u==1){
while(n%10==0)
n=n/10;
printf("%d\n",n%10);
}
else
{
u=n-u;
twos=power(2,n)-power(2,u);
fives=power(5,n)-power(5,u);
twos=(twos-fives)%4;
digittwo=index[0][twos];
threes=0;
sevens=0;
for(i=3;i<=n;i+=2){
if(!ifc(i))
{
p=i%10;
if(p==7||p==3||p==9){
int c=power(i,n)-power(i,u);
if(p==7)
sevens=sevens+c;
else if(p==3)
threes=threes+c;
else if(p==9)
threes=threes+2*c;
}
}
}
threes=threes%4;
digitthree=index[1][threes];
sevens=sevens%4;
digitseven=index[2][sevens];
lastdigit=(digittwo*digitseven*digitthree)%10;
printf("%d\n",lastdigit);
}
}
return 0;
}