Pagini recente » Cod sursa (job #420482) | Cod sursa (job #825588) | Cod sursa (job #870963) | Cod sursa (job #1389594) | Cod sursa (job #262573)
Cod sursa(job #262573)
# include <cstdio>
//# include <time.h>
# include <string.h>
using namespace std;
# define FIN "stramosi.in"
# define FOUT "stramosi.out"
# define min(a, b) (a < b ? a : b)
# define LMAX 3000005
# define Mod 666013
# define Nr 25
int T, i, j;
int Pow[Nr];
long long A, B;
int L[Mod + 5], C[Mod + 5];
char s[LMAX];
void preprocesare()
{
int Bound = 20;
Pow[0] = 1;
for (i = 1; i <= Bound; ++i) Pow[i] = (Pow[i - 1] * 2);
int c;
for (i = 0; i < Bound; ++i)
for (j = Pow[i], c = 1; j < Mod; j += Pow[i + 1], ++c)
{
L[j] = Bound - i;
C[j] = c;
}
}
int stramos(int st, int A, int B)
{
int mij, l1, l2, dr = min(L[A], L[B]), sol = 0;
while (st <= dr)
{
mij = (st + dr) >> 1;
l1 = Pow[L[A] - mij]; l2 = Pow[L[B] - mij];
if ((C[A] + l1 - 1) / l1 == (C[B] + l2 - 1) / l2)
{
sol = mij;
st = mij + 1;
} else dr = mij - 1;
}
return sol;
}
int Sol(int A, int B)
{
int father = stramos(1, A, B);
return (L[A] + L[B] - (father << 1));
}
int main()
{
//double t = clock();
freopen(FIN,"r",stdin);
freopen(FOUT,"w",stdout);
preprocesare();
/*scanf("%d",&T);
scanf("%lld %lld",&A, &B);*/
T = 1000000; A = 1; B = 666010;
int rez, ct = -1;
for (i = 1; i <= T; ++i)
{
rez = Sol(A, B);
if (rez > 9) s[++ct] = rez / 10;
s[++ct] = rez % 10; s[++ct] = '\n';
A = (A * (i + 1)) % Mod; B = (B * (i + 1)) % Mod;
if (!A || !B) A = 123, B = 666011;
}
printf("%s",s);
//printf("%lf",(clock() - t) / CLOCKS_PER_SEC);
return 0;
}