64,637
社区成员
发帖
与我相关
我的任务
分享
#include <cstdio>
#include <cassert>
// calculate a**b%c
int fun(int a, int b, int c)
{
assert(a && (b>=0) && c);
static int itime=0;
if (++itime%1000==0)// 每递归1000次时打印
{
printf("%d\n",itime);
}
if (0==b)
{
return 1;
}
else
{
return fun(a, b-1, c)*a%c;
}
}
int main()
{
int a, b, c;
while (3==scanf("%d%d%d",&a,&b,&c))
{
printf("%d\n",fun(a,b,c));
}
return 0;
}
#include <cstdio>
#include <ctime>
#include <cassert>
// calculate a**b%c
int fun(int a, __int64 b, int c)
{
assert(a && (b>=0) && c);
static int itime=0;
if (++itime%100000000==0)// 每递归1亿次时打印
{
printf("%d\n",itime);
}
if (0==b)
{
return 1;
}
else
{
return (1==(b&1)) ? a*fun(a, b-1, c)%c : fun(a, b/2, c)*fun(a, b/2, c)%c;
}
}
int main()
{
int a, c;
__int64 b;
clock_t beg,end;
while (3==scanf("%d%I64d%d",&a,&b,&c))
{
beg=clock();
printf("%d\n",fun(a,b,c));
end=clock();
printf("time used: %.2lf\n",double(end-beg)/CLOCKS_PER_SEC);
}
return 0;
}