TOTALODD - Số lẻ hoàn toàn
Tác giả: hieult
Ngôn ngữ: C++
#include <cstdio>
//#include <conio.h>
int k[] = {0,1,3,5,7,9};
int mu5[10],a[500000],mu10[10],b[100000];
int main()
{
//freopen("TOTALODD.in","r",stdin);
mu5[0] = 1; mu10[0] = 1;
for(int i = 1;i<=9;i++)
{
mu5[i] = mu5[i-1]*5;
mu10[i] = mu10[i-1]*10;
}
for(int i = 1;i<=5;i++)
{
a[i] = k[i];
b[i] = k[i];
}
int chay = 5;
for(int i = 2;i<=8;i++)
{
int t,K;
for(int j = 1;j<=mu5[i];j++)
{
t = a[(j-1)/mu5[i-1]+1];
a[chay+j] = t*mu10[i-1]+b[(j-1)%mu5[i-1]+1];
}
if(i!=8)
for(int j = 1;j<=mu5[i];j++)
b[j] = a[chay+j];
chay = chay+mu5[i];
}
char s[20];
int n;
//printf("%d",chay);
while(scanf("%s",s)>0 && s[1] != 'E')
{
scanf("%d",&n);
int u,v,r,min = 100000001;
if(n>=a[chay])
u = chay;
else
{
u = 1;v = chay;
while(v-u >1)
{
r = (u+v)/2;
if(a[r]<=n)
u = r;
else v = r;
}
}
v = 1;
while(v<=u)
{
while(a[v]+a[u]<n) v++;
if(a[v]+a[u]<min)
min = a[v]+a[u];
u--;
}
printf("%d\n",min);
}
//getch();
}