zoukankan      html  css  js  c++  java
  • 【快速幂】P3197越狱

    花费了好长时间,终于刷掉了这道题。

    题目在这里(洛谷)  (信息学奥赛一本通)

    嗯,没错,这是一道快速幂的题,不会快速幂点这里

    好现在开始分析,这道题用小学奥数的思想就可以想到,直接算有多少种可能比较难,所以就算出所有的情况再减去不越狱的情况,就是越狱的情况了。所有情况就是mn,不发生的情况就是m*(m-1)(n-1),所以,发生的情况就是mn-m*(m-1)(n-1)

    然后就成功的算出了发生的情况数。

    代码如下

     1 #include<iostream>
     2 #define LL long long    //下面LL可以代替long long
     3 using namespace std;
     4 LL m, n, mod=100003;
     5 LL power(LL a, LL b){
     6     int ans=1, base=a;
     7     while (b != 0){
     8         if (b&1 == 1) ans=(ans*base)%mod;   //b&1==1 = b%2==1 
     9         base=(base*base)%mod;
    10         b>>=1;
    11     }
    12     return ans;
    13 }
    14 int main()
    15 {
    16     cin>>m>>n;
    17     cout<<power(m, n)-((m%mod)*power(m-1, n-1)%mod+mod)%mod<<endl;    //公式
    18     return 0;
    19 }

    这个代码样例是可以过去的,but只有10分,我也不知道为啥。

    但是根据对输出的分析,我给快速幂多mod了几下,竟然AC啦…

    所以看下面,AC代码

     1 #include<iostream>
     2 #define LL long long
     3 using namespace std;
     4 LL m, n, mod=100003;
     5 LL power(LL a, LL b){
     6     int ans=1, base=a;
     7     while (b != 0){
     8         if ((b&1) == 1) ans=(ans%mod)*(base%mod)%mod;
     9         base=(base%mod)*(base%mod)%mod;
    10         b>>=1;
    11     }
    12     return ans;
    13 }
    14 int main()
    15 {
    16     cin>>m>>n;
    17     cout<<(power(m, n)-(m*power(m-1, n-1))%mod+mod)%mod<<endl;
    18     return 0;
    19 }
  • 相关阅读:
    fatal error C1189: #error : WINDOWS.H already included. MFC apps must not #include <windows.h>
    cvWaitKey 如果 cvNamedWindow就不会起作用
    Java 并发基础
    简化Getter 与 Setter 的插件 Lombok
    20、状态模式
    mybatis-generator 覆盖新增XML
    Jvm 虚拟机
    18、备忘录设计模式
    16、 观察者设计模式
    08、仲载者 -中间者模式
  • 原文地址:https://www.cnblogs.com/Alan-Anders/p/10460038.html
Copyright © 2011-2022 走看看