zoukankan      html  css  js  c++  java
  • 51Nod

    题意:

    给出3个正整数A B C,求A^B Mod C。

    例如,3 5 8,3^5 Mod 8 = 3。

    分析:

    快速幂模板题。

    快速幂:

    1.自然数的拆分

    对于任何的自然数, 可以把它用形如1001的二进制码表示,进而写成形如 20 + 23 的形式。 

    这一步的实现:

    • 对任意自然数a, 当且仅当 a&1 == 1为真时,其二进制码最低位为1.
    • 通过位运算, 将可将其二进制码的任意一端的任意位舍去。

    2.因子的迭代

    我们需要遍历底数的 20,21,22,23......次方。

    这一步的实现:

    • 2n+ 2n=2n+1
    • ca+b=ca * cb

    实现:

    import java.util.*;
    public class Main {
        public static long C;
        public static long qPow(long a, long b) {
            long ans = 1;
            long base = a;
            while (b>0) {
                if ((b & 1) > 0) {
                    ans = ((ans%C)*(base%C))%C;
                }
                base = ((base%C)*(base%C))%C;
                b >>= 1;
            }
            return ans;
        }
        public static void main(String[] args) {
            Scanner input = new Scanner(System.in);
            long a = input.nextLong();
            long b = input.nextLong();
            C = input.nextInt();
            System.out.printf("%d
    ",qPow(a,b));
            input.close();
        }
    
    }

    注意:

    一般使用长整形。

  • 相关阅读:
    20150128-堆雪人
    20150127-梦里笑醒的声音
    20150126-渡口
    20150125-阴天
    FastAdmin 的上传代码在哪里?
    在 Linux 安装 IIS?
    FastAdmin env.sample 的用法
    可以方便配合 Git 的现代编辑器
    运算放大器复习
    Linux 权限使用 777 真的好吗?
  • 原文地址:https://www.cnblogs.com/NeoLCX/p/8762544.html
Copyright © 2011-2022 走看看