首页 > 学院 > 开发设计 > 正文

1046 A^B Mod C

2019-11-11 04:07:58
字体:
来源:转载
供稿:网友

思路:先得到三个数, 然后对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);        }    }}


上一篇:dp的城府

下一篇:linux下安装配置redis

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表