新浪博客 发表时间 --2009-07-26 20:11:01
题解:
解法一:可套公式,A*B mod C=((A mod C)*(B mod C) mod C ;A^B mod C=(A mod C)^(B mod C) mod C。
数据如果过大,则要考虑其他方法,此题的解法用到了逐次平方法(幂模运算)。具体实现过程参考数论相关的书籍。
需要注意的是,要小心溢出问题,比如a=a*b%c,如果简单这样计算的时候,如果a足够大的时候,就会导致溢出,处理方法为取a二进制值第一位乘以b与c模算加上a右移一位与相乘再和c做模运算后的值左移一位相加,再将相加的值和c做模运算,递归此过程,过程结束标志为a=0。
代码:
#include<stdio.h>
unsigned long long mul(unsigned long long a,unsigned long long b,unsigned long long c)
{
unsigned long long int a1=a,b1=b,c1=c;
if(!a1)
}
unsigned long long mod(unsigned long long a,unsigned long long b,unsigned long long c)
{
}
int main()
{
}
解法二:
unsigned long long mul(unsigned long long a,unsigned long long b,unsigned long long c)
{
unsigned long long ret=0,tmp=a%c;
while(b)
{
}
return ret;
}
这个函数是网上找的,现在是看不懂,研究中....
解法三:
代码:
#include "stdio.h"
int power(int a,int b,int c)
{
}
int main()
{
}