10547 - Hidden Truth in Recurrence
Posted: Wed Aug 27, 2003 9:06 pm
I have got many WAs.
As I understood the program should calculate (k^n) mod (10^t)
Am I right ? If I am then it is very very strange.
To calculate (k^n) mod (10^t) I use Modular-Exponentiation Algo based on repeated squaring. But WA
Here is my program
[cpp]#include <iostream.h>
#include <stdio.h>
int main()
{
long long n, k, t, m, testid = 0, d;
while (1)
{
scanf("%lld %lld %lld", &k, &n, &t);
if (n + k + t <= 0) break;
cout << "Case #" << ++testid << ": ";
m = 1;
while (t--) m *= 10;
int b[100], bcnt = 0;
while (n)
{
b[bcnt++] = n % 2;
n /= 2;
}
d = 1;
for (n = bcnt - 1; n >= 0; n--)
{
d = (d * d) % m;
if (b[n]) d = (d * k) % m;
}
printf("%lld\n", d);
}
return 0;
}[/cpp]
As I understood the program should calculate (k^n) mod (10^t)
Am I right ? If I am then it is very very strange.
To calculate (k^n) mod (10^t) I use Modular-Exponentiation Algo based on repeated squaring. But WA

Here is my program
[cpp]#include <iostream.h>
#include <stdio.h>
int main()
{
long long n, k, t, m, testid = 0, d;
while (1)
{
scanf("%lld %lld %lld", &k, &n, &t);
if (n + k + t <= 0) break;
cout << "Case #" << ++testid << ": ";
m = 1;
while (t--) m *= 10;
int b[100], bcnt = 0;
while (n)
{
b[bcnt++] = n % 2;
n /= 2;
}
d = 1;
for (n = bcnt - 1; n >= 0; n--)
{
d = (d * d) % m;
if (b[n]) d = (d * k) % m;
}
printf("%lld\n", d);
}
return 0;
}[/cpp]