• 372. Super Pow


    问题

      Your task is to calculate ab mod 1337 where a is a positive integer and b is an extremely large positive integer given in the form of an array.

      Example1:

      a = 2
      b = [3]
    
      Result: 8
    

      Example2:

      a = 2   b = [1,0]   Result: 1024

    分析
      

      根据公式 ① ② ab mod 1337 可以优化为 (a mod 1337)b mod 1337 ,所以每次计算底数的时候,计算之前和之后,都进行mod,预防结果超过整数范围。
      根据公式 ③ ,可以根据题意对指数进行分解,本题的进制为10.
      根据公式 ④,对计算过程进行分解,每一步都是计算 ,由于ai知道,所以每步的计算其实是计算底数。

    代码
     

        int mod = 1337;
        int superPow(int a, vector<int>& b) {
            int answer = 1,n = b.size();
            if( n == 0)
                return 1;
            for(int i = n - 1;i >= 0; i--)
            {
                if( b[i] > 0)
                    answer = answer * Inpow(a,b[i]) % mod;
                a = Inpow(a,10);
            }
            return answer;
        }
        
        int Inpow(int base,int exp){
            int result = 1;
            base = base%mod;
            
            for(int i = exp; i > 0;i = i >> 1)
            {
                if( i & 1 == 1)
                    result = result * base %mod;
                base = base * base % mod;
            }
            
            return result % mod;
            
        }


      


        
  • 相关阅读:
    WebSocket面试题
    面试题、四
    面试题、三
    面试题、二
    面试题、一
    vue 使用localstorage实现面包屑
    flutter,SliverPersistentHeader实现Tab顶部吸附固定效果
    对flutter中,ExpsionPanel的简单改造
    node.js学习笔记
    PHP和Redis实现在高并发下的抢购及秒杀功能示例详解
  • 原文地址:https://www.cnblogs.com/with-a-orchid/p/SuperPow.html
Copyright © 2020-2023  润新知