by Pavl0 » Tue Jul 06, 2004 8:28 am
j use this algoritm but j get wa
pleas give me some simple input output
program pased all input who was on forum
#include <stdio.h>
unsigned int pierwsze[100000];
unsigned int fstost[100000];
unsigned int liczp=2;
unsigned int oset;
unsigned int iled;
unsigned int ilep;
unsigned int inline mnoz(unsigned int a,unsigned int b)
{
//printf("monoze %d * %d \n",a,b);
//if(a==0)while(1)printf("lol");
a*=b;
//printf("!!!%d!!!\n",a);
//printf("!%d!\n",a);
return a%10;
}
void inline calc(unsigned int nbr)
{
unsigned int dk,i,j,tmp;
//if(wyny[nbr]!=0){printf("%d\n",wyny[nbr]); return;}
//if(nbr>100000){printf("%d\n",5); return;}
for(i=0;i!=liczp;i++)
{
tmp=pierwsze[i];
dk=0;
while(1)
{
if(tmp>nbr)break;
// if(tmp<0)while(1)printf("FATAL ERROR");
dk++;
tmp*=pierwsze[i];
}
if(dk==0)break;
// printf("%d ^ %d*\n",pierwsze[i],dk);
// dk--;
//while(dk--)oset=mnoz(oset,pierwsze[i]);
if(fstost[i]==2){iled=dk;}
if(fstost[i]==5){ilep=dk;}
if( fstost[i]!=2 && fstost[i]!=5)
{
while(dk--)oset=mnoz(oset,pierwsze[i]);
// tmp=fstost[i];
//
// while(1)
// {
// if(dk%2==0){dk/=2; tmp*=tmp; oset=mnoz(oset,tmp); if(dk==1)break; }
// if(dk%2==1){dk-=1; oset=mnoz(oset,tmp); if(dk==0)break;}
// }
}
}
dk=iled-ilep;
//printf("!%d!\n",dk);
while(dk--){oset=mnoz(oset,2);}
//printf("LOL");
//wyny[nbr]=oset;
printf("%d\n",oset);
}
main()
{
unsigned int i,j,nbr,tmp;
pierwsze[0]=2;
pierwsze[1]=3;
for(i=6;i<=1000000;i+=6)
{
for(j=0;;j++){ if((i-1)%pierwsze[j]==0)break; if((pierwsze[j]*pierwsze[j])>(i-1)){pierwsze[liczp]=i-1; liczp++; break;}}
for(j=0;;j++){ if((i+1)%pierwsze[j]==0)break; if((pierwsze[j]*pierwsze[j])>(i+1)){pierwsze[liczp]=i+1; liczp++; break;}}
}
for(i=0;i!=liczp;i++)fstost[i]=pierwsze[i]%10;
//for(i=990000;i!=1000000;i++){printf("!%d! \n",i); oset=1; calc(i);}
while(1)
{
scanf("%d",&nbr);
oset=1;
iled=0;
ilep=0;
if(nbr==0)break;
calc(nbr);
}
}