思路:先得到三个数, 然后对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); } }}
新闻热点
疑难解答