zoukankan      html  css  js  c++  java
  • 快速幂的求解-java方法(int范围之内)

    思想就是,将十进制数化成二进制数。其它就是很简单了。

    如:2的11次幂,11的二进制位1011,所以2(11) = 2(2(0) + 2(1) + 2(3));

    具体实现步骤,看代码比较简单

    import java.util.Scanner;

    public class Main
    {
        public static void main(String[] args)
        {
            Scanner cin = new Scanner(System.in);
            //底数
            int a = cin.nextInt();
            //指数
            int b = cin.nextInt();
            int sum = 1;
            int temp = a;
            while(b != 0)
            {
                //取其末位
                if((b & 1) != 0)
                {
                    sum = sum * temp;
                }
                temp = temp * temp;
                //除其末位
                b = b>>1;
            }
            System.out.print(sum);
        }
    }
    1.经典题目:

    输入t,mod,n。t表示测试个数,mod需要除以这个数,n表示以下几行
    输入n行,每行两个数字,x,y 求这n行里x的y次方的累加和除以mod,得到余数
    输出余数。

    实现代码如下:

    import java.util.Scanner;

    public class Main

    {

    static int m;

    public static void main(String []args)

    {

    Scanner cin = new Scanner(System.in);

    int T = cin.nextInt();

    for(int i = 0; i < T; i++)

    {

    m = cin.nextInt();

    int n = cin.nextInt();

    int output = 0;

    for(int j = 0; j < n; j++)

    {

    int a = cin.nextInt();

    int b = cin.nextInt();

    output = (output + Mod(a,b))%m;

    //在这里要注意:不用

    /*

      output += Mod(a,b)%m;

      output = output%Mod;

    */

    }

    System.out.println(output);

    }

    }

    static int Mod(int a,int b)

    {

    int result = 1;

    int temp = a;

    while(b != 0)

    {

    temp = temp % m;//这一步不能不写,不写可能爆栈

    if((b & 1) != 0)

    {

    result = (result%m)*(temp%m);//分别除以m,防止爆栈

    }

    temp = temp*temp%m;//除了m,防止爆栈

    b = b>>1;

    }

    return result;

    }

    }

    import java.util.Scanner; publicclass Main { staticint m; public static void main(String []args) { Scanner cin = new Scanner(System.in); int T = cin.nextInt(); for(int i = 0; i < T; i++) { m = cin.nextInt(); int n = cin.nextInt(); int output = 0; for(int j = 0; j < n; j++) { int a = cin.nextInt(); int b = cin.nextInt(); output = (output + Mod(a,b))%m; } System.out.println(output); } } static int Mod(int a,int b) { int result = 1; int temp = a; while(b != 0) { temp = temp % m; if((b & 1) != 0) { result = (result%m)*(temp%m); } temp = temp*temp%m; b = b>>1; } return result; } }

  • 相关阅读:
    【转】myeclipse设置优化+快捷命令大全
    记昨日参加南天竺饶老师回访的一些感触点
    [zz]程序猿,你今天装B了没?
    什么是CGI
    Agile Tour——敏捷,在厦门落地 笔记小结
    用按键精灵来自动投票
    win7下安装matlab,启动后提示VC++Runtime Library错误 runtime error!
    单次扫描完成二值图连通区域标记
    6.3.2 最小支撑树树Prim算法,基于优先队列的Prim算法,Kruskal算法,Boruvka算法,“等价类”UnionFind
    用Java HashMap做对象Cache时要注意一点
  • 原文地址:https://www.cnblogs.com/674001396long/p/9759606.html
Copyright © 2011-2022 走看看