首先经过读题,我们发现找到合格的金坷垃,怎么样的金坷垃才是合格的呢?(我们不难发现1肯定是合格的【题目已经给出了】)

然后我们开始手推一下之后合格的金坷垃:

2-1=1(合格)

3-1-1=1(不合格(1重复减了))

4-2-1=1(合格)

......


对于任意一个数,他减去他的任意一个约数(除它本身)最小值都为他本身的1/2,我们可以考虑倒着推回去这样就行了,发现合格的金坷垃必须是2的倍数,我们可以用反证法来证明,如果一个合格的金坷垃不是二的倍数,那么最后经过前面的相减肯定会变成一个质数。

一个质数的约数(除它本身)只有1,但我们用一个数只能用一次,那么这个金坷垃就不是一个合格的金坷垃

如90:

90-45=45;

45-15=30;

30-10=20;

20-5=15;

15-3=12;

12-6=6;

6-3=3;

最后剩下了3(质数)【这个各位可以自己推一下】


1;

1+1=2;

1+1+2=4;

1+1+2+4=8;

1+1+2+4+8=16;

......

不难发现第i个合格的金坷垃就是2的i-1次方,这样我们就可以用快速幂来解决了


直接用快速幂模板就能过了!

#include<bits/stdc++.h>//万能头
using namespace std;
const int mod=123456789;//要mod的值
long long n;
long long qmi(long long x,long long k){//快速幂模板
long long res=1;
while(k>0){
if(k&1){
res=res*x%mod;
}
x=x*x%mod;
k>>=1;
}
return res;
}
int main(){
cin>>n;
cout<<(qmi(2,n-1)%mod+mod)%mod<<endl;//输出2的n-1次方,(qmi(2,n-1)%mod+mod)%mod是防负数的,但这个没有负数就可以不用写
return 0;//结束程序
}

根据这个题目我们可以引出快速幂了:

顾名思义,快速幂就是快速算底数的n次幂。其时间复杂度为 O(log₂N), 与朴素的O(N)相比效率有了极大的提高。这就可以让我们不用担心t掉了。

快速幂算法的核心思想就是每一步都把指数分成两半,而相应的底数做平方运算。这样不仅能把非常大的指数给不断变小,所需要执行的循环次数也变小,而最后表示的结果却一直不会变。(一般在题目当中都会mod一个数字,我们也不用考虑写高精度)
让我们先来看一个简单的例子:
我们用ans来记录答案
因为这个是乘法,所以说ans赋值为1;
3^10=3*3*3*3*3*3*3*3*3*3*ans
3^10=(3*3)*(3*3)*(3*3)*(3*3)*(3*3)*ans
3^10=(3*3)^5*ans;
3^10=9^5
-----------------  一次操作(n为偶数的情况)(n为偶数的情况,ans的值不会改变)
3^10=(9^4)* 9
ans=ans*9;
3^10=  (9^4)*ans
9^5= (81^2)*ans
-----------------  又一次操作(n为奇数的情况)(n为奇数的情况,ans的值等于它本身×底数)
 
所以在实现代码之前,我们先在这里总结一下快速幂
  • 优势:
  • 时间复杂度为 O(log₂N), 与朴素的O(N)相比效率有了极大的提高
  • 用法:
  • 指数为奇数,ans=ans*底数,底数平方,指数右移一位(除以2向下取整)
  • 指数为偶数,ans不变,底数平方,指数右移一位(除以2)
 代码实现
int qmi(int m, int k, int p)
{
int ans = 1 % p, t = m;
while (k)
{
if (k&1) ans = ans * t % p;//如果指数是奇数的话,ans=ans*底数t
t = t * t % p;//底数平方(无论指数是奇数还是偶数都要平方)
k >>= 1;//指数右移一位(除以2或者向下取整)
  }
  return res;
}

P5035金坷垃题解(快速幂的讲解)的更多相关文章

  1. FJUT寒假作业第二周G题解快速幂

    题目来源:http://210.34.193.66:8080/vj/Contest.jsp?cid=161#P6     题意:求n个数字的乘积对c取摸.主要就是有快速幂扩展到广义幂的过程. 首先题目 ...

  2. 89. a^b【快速幂模板】

    a^b Description 求 aa 的 bb 次方对 pp 取模的值. 输入格式 三个整数 a,b,pa,b,p ,在同一行用空格隔开. 输出格式 输出一个整数,表示a^b mod p的值. 数 ...

  3. csu 1556(快速幂)

    1556: Jerry's trouble Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 787  Solved: 317[Submit][Statu ...

  4. “盛大游戏杯”第15届上海大学程序设计联赛夏季赛暨上海高校金马五校赛题解&&源码【A,水,B,水,C,水,D,快速幂,E,优先队列,F,暴力,G,贪心+排序,H,STL乱搞,I,尼姆博弈,J,差分dp,K,二分+排序,L,矩阵快速幂,M,线段树区间更新+Lazy思想,N,超级快速幂+扩展欧里几德,O,BFS】

    黑白图像直方图 发布时间: 2017年7月9日 18:30   最后更新: 2017年7月10日 21:08   时间限制: 1000ms   内存限制: 128M 描述 在一个矩形的灰度图像上,每个 ...

  5. codevs3500 快速幂入门题解

    codevs3500 快速幂入门题解 //我也是抄的题解 题目描述 Description 输入3个数a,b,c,求a^b mod c=? 输入描述 Input Description 三个数a,b, ...

  6. 洛谷 P1226 【模板】快速幂||取余运算 题解

    Analysis 快速幂模板,注意在最后输出时也要取模. 快速幂模板 inline ll ksm(ll x,ll y) { ll ans=; ) { ) { ans*=x; ans%=k; } x*= ...

  7. [题解][SHOI2013]超级跳马 动态规划/递推式/矩阵快速幂优化

    这道题... 让我见识了纪中的强大 这道题是来纪中第二天(7.2)做的,这么晚写题解是因为 我去学矩阵乘法啦啦啦啦啦对矩阵乘法一窍不通的童鞋戳链接啦 层层递推会TLE,正解矩阵快速幂 首先题意就是给你 ...

  8. 小白详细讲解快速幂--杭电oj2035-A^B

    Problem Description 求A^B的最后三位数表示的整数.说明:A^B的含义是“A的B次方”  Input 输入数据包含多个测试实例,每个实例占一行,由两个正整数A和B组成(1<= ...

  9. 题解-AtCoder-agc003F Fraction of Fractal(非矩阵快速幂解法)

    Problem AtCoder-agc003F 题意:给出\(n\)行\(m\)列的01矩阵,一开始所有 \(1\) 连通,称此为\(1\)级分形,定义\(i\)级分形为\(i-1\)级分形中每个标示 ...

随机推荐

  1. spring-boot如何生成元数据与javaBean进行关联用作配置文件提示

    spring-boot如何生成元数据与javaBean进行关联用作配置文件提示 首先需要引入一个jar依赖包,以及一个maven plugin如下所示 <dependency> <g ...

  2. .net 安装部署诀窍

    1.解决方案资源管理器中有多个类库项目和一个启动主项目时:各类库项目的生成路径设为bin\debug: 启动主项目的生成路径设成指定的主输出路径: 2.打包时在应用程序文件夹中添加主输出即可,主输出的 ...

  3. js_ts_ec6

    JS.ES.TS三者的关系 https://zhuanlan.zhihu.com/p/148875882 package.json详解 https://www.cnblogs.com/sweet-ic ...

  4. 分数运算(gcd)

    时间限制 1000 ms 内存限制 32768 KB 代码长度限制 100 KB 判断程序 Standard (来自 小小) 题目描述 计算机中采用浮点数表示所有实数,但这意味着精度丢失.例如无法精确 ...

  5. 跟着尚硅谷系统学习Docker-【day05】

    day05-20200717   p21.docker容器数据卷容器   就是活动硬盘上面挂载硬盘进行数据的传递.     [docker run -it --name dc01 fyr/centos ...

  6. Avtiviti工作流规范 BPM与BPMN

    进过长时间的轮转,重拾Activiti,因为最近在智联上看到多家公司的需求上写的,都要熟悉工作流引擎,也就是activiti所以重拾 之前看的视屏是activiti5,我觉得版本有点低,所以打算看一下 ...

  7. uap设置gradle和jdk

  8. hadoop不能互相访问和linux防火墙守护进程

    前言——作为装过几次集群的菜鸟,对于hadoop集群的安装还是比较有心得的:只要配置文件够好,集群配置就非常容易,否则也容易出现莫名其妙的问题!总结了一份3台机器搭建较完好的集群的一份配置文件. 在我 ...

  9. myeclipse操作hdfs

    myeclipse与hadoop集成我就不说了,还是简单说两句吧! 1.hadoop搭建完毕且可以正常访问(Linux搭建的集群环境 主机是windos) 2.在主机上将hadoop包解压 3.通过m ...

  10. Python - 网易邮箱邮件阅读和删除辅助小脚本

    摘要:[原创]转载请注明作者Johnthegreat和本文链接 简介:在Windows下的网易邮箱大师客户端中,阅读邮件时,可以使用快捷键Delete删除邮件,然后自动跳到下一封,如果再按一次Dele ...