思路:先得到三个数, 然后对A求幂 再模c,然后得余数 我最开始呢老是先得到余数再去求模,但是老是超时,然后看别人都是折倍求 效率提高很多,总结经验有下面两个程序,本质是一样的
------------------------------------------------------------------------------------------------------------------------------------------------
using System;
using System.IO;
using System.Linq;
using System.Numerics;
public class Program
{
public static void Main(string[] args)
{
var sr = new StreamReader(Console.OpenStandardInput());
var sw = new StreamWriter(Console.OpenStandardOutput());
string[] s = sr.ReadLine().Split(' ');
var a = BigInteger.Parse(s[0]);
var b = BigInteger.Parse(s[1]);
var c = BigInteger.Parse(s[2]);
var ret = 1;
while (b > 0)
{
if ((b % 2) > 0)
{
ret = (int)((ret * a) % c);
}
a = (a * a) % c;
b /= 2; ;
}
sw.WriteLine(ret);
sr.Close();
sw.Close();
}
}
-----------------------------------------------------------------------------------------------------------------------------------
这个程序的变量要是定义成int类型,测试数据时会有错误,所以换成了long
using System;
using System.IO;
namespace 求模
{
class program
{
static void Main(string [] str)
{
StreamReader sr = new StreamReader(Console.OpenStandardInput());
string[] s = sr.ReadLine().Split(' ');
long a = Convert.ToInt32(s[0]);
long b = Convert.ToInt32(s[1]);
long c = Convert.ToInt32(s[2]);
long result = 1;
while(b>0)
{
if(b%2!=0)
{
result = (result * a) % c;
}
a = (a * a)%c;
b = b / 2;
}
Console.WriteLine(result);
}
}
}