zoukankan      html  css  js  c++  java
  • 减小模运算时间复杂度的小技巧

      昨天兄弟问我一个模运算的题,怎么写怎么超时,要么WA,两个菜鸟讨论了半天也没讨论出个所以然来。后天问了别人,感觉这种写法很实用啊,就先存在这里。

      题目是SDUST OJ上的,题目如下:

    Problem U: 开心的小杰

    Time Limit: 1 Sec  Memory Limit: 128 MB
    Submit: 135  Solved: 25
    [Submit][Status][Web Board]

    Description

    小杰这次被某外语专业录取了,他发现班里n个MM,小杰从来没有见过这么多MM,假设小杰的人品值为rp,桃花运指数为m,则小杰最多可以追到(rp^m)%n个MM(^为乘方符号,例如a^b为a的b次方,%为取余符号,例如a%b为a除b的余数)。

    Input

    有多组输入数据,每组输入数据3个整数rp,m,n(0<n<2^31,0<rp<2^31,0<m<2^31).

    Output

    每个数据输出一行,一个整数代表小杰最多可以追到多少个MM。

    Sample Input

    1 1 2 2 4 100

    Sample Output

    1 16
     
     
     
    代码如下
     1 #include <iostream>
     2 #include <cstdio>
     3 using namespace std;
     4 
     5 int main()
     6 {
     7     long long rp,m,n;
     8     while(cin >> rp >> m >> n)
     9     {
    10         rp %= n;
    11         long long ans = 1;
    12         for (int i=0;i<m/1024;i++)
    13         {
    14             ans = ans * rp % n;
    15         }
    16         for (int i=0;i<10;i++)//这个10与上面的1024的关系为 2^10 == 1024;换成256与8也能过,这是时间会慢很多;
    17         {
    18             ans = ans * ans % n;
    19         }
    20         for (int i=0;i<m%1024;i++)
    21         {
    22             ans = ans * rp % n;
    23         }
    24         cout << ans << endl;
    25     }
    26 }

     

  • 相关阅读:
    mysql主从复制
    nginx代理tcp协议连接mysql
    spark安装配置
    DataX 3.0简介 安装及使用
    Consul 快速入门
    Etcd 使用入门
    常见负载均衡算法
    Container is running beyond memory limits
    HADOOP_MAPRED_HOME=${full path of your hadoop distribution directory}
    快速搞定Windows10环境下hadoop安装和配置
  • 原文地址:https://www.cnblogs.com/zmx354/p/3088171.html
Copyright © 2011-2022 走看看