Pagini recente » Cod sursa (job #2033535) | Cod sursa (job #1185234) | Cod sursa (job #2047532) | Cod sursa (job #2999285) | Cod sursa (job #262565)
Cod sursa(job #262565)
# 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 Mod 666013
# define Nr 25
int T, i, j;
int Pow[Nr];
long long A, B;
int L[Mod + 5], C[Mod + 5];
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)
{
//printf("%d\n",Sol(A, B));
printf("%lld\n",A);
A = (A * (i + 1)) % Mod; B = (B * (i + 1)) % Mod;
if (!A || !B) A = 123, B = 666011;
}
printf("%lf",(clock() - t) / CLOCKS_PER_SEC);
return 0;
}