Pagini recente » Cod sursa (job #742432) | Cod sursa (job #2887753) | Cod sursa (job #2975532) | Cod sursa (job #26207) | Cod sursa (job #115279)
Cod sursa(job #115279)
#include <stdio.h>
//#include <time.h>
#define maxN 2000100
int a,b,n;
int vec[maxN],lst[maxN],ac[maxN],st,cur,k,kac;
int gcd(int a,int b){int c;do{if(a<b)c=a,a=b,b=c;a%=b;}while(a);return b;}
void inputFunc(){FILE*fi=fopen("multiplu.in","r");fscanf(fi,"%d %d",&a,&b);n=a*b/gcd(a,b);fclose(fi);}
void outputFunc(){
FILE*fi=fopen("multiplu.out","w");
int x=0,ul=vec[x];
while(x!=-1){
for(int i=ul;ul>vec[x];ul--)fprintf(fi,"0");
fprintf(fi,"1");ul--;
x=lst[x];
}
while(ul--)fprintf(fi,"0");
fclose(fi);
}
int main(){
//clock_t st=clock();
inputFunc();
vec[1]=1,lst[1]=-1,ac[kac++]=1;
k=2;
cur=st=10%n;
for(;!vec[0];cur=(cur*st)%n,k++){
for(int j=kac-1;j>=0;j--){
int i=ac[j];
if(vec[i] && vec[i]<k){
int u=i+cur;if(u>=n)u-=n;
if(!vec[u])vec[u]=k,lst[u]=i,ac[kac++]=u;
}
if(!vec[cur])vec[cur]=k,lst[cur]=-1,ac[kac++]=cur;
}
}
outputFunc();
//printf("%d\n",clock()-st);
return 0;
}