函数

在c语言中 main() 就是一个函数,它是程序的主函数。

函数定义的一般格式:

返回类型 函数名(参数列表){函数体
}

返回类型

  • 一个函数可以返回一个值,返回类型就是对应的值的类型。常见的有int、long long、bool、double、float,如果函数没有返回值就用void

函数名

  • 自定义名称
  • 字母、数字、下划线混合使用,但是只能以字母或下划线开始

参数列表

  • 传递参数时要和参数列表中的顺序、数量、类型相对应
  • 参数是可选的,函数可以不包含参数

函数体

  • 自定义的执行语句

实例

自定义Max(),返回num1,num2中的最大值

int Max(int num1, int num2) {if (num1 > num2)return num1;elsereturn num2;
}

函数声明

  • 函数声明告诉编译器函数的名称、如何调用函数

  • 一般格式为返回类型 函数名(参数列表);

  • 对于上面定义的 Max() 函数,声明函数为int Max(int num1, int num2);

  • 在函数声明中参数的名称不重要,参数的类型是必要的。因此也可以这样声明int Max(int, int);

函数的调用

函数定义之后,通过调用完成指定的操作, 当程序调用函数时,程序就会执行函数体中的语句直到执行完毕return返回,这样就完成了一次调用

#include <iostream>
using namespace std;
int Max(int num1, int num2) {if (num1 > num2)return num1;elsereturn num2;
}int main() {int a = 10;int b = 20;// 调用函数并输出结果cout << Max(a, b) << endl;return 0;
}

小练习

  • 判断闰年
  • 求圆的面积

快速幂

问题

求 ab%pa^{b} \%pab%p

思路

  • 最容易想到的是循环求值,循环操作b次每次乘以a,时间复杂度O(n)
int p = 10000007;
int a = 2, b = 10;
int ans = 1;
for (int i = 1; i <= b; ++i) {ans = (ans * a) % p;
}
cout << ans << endl;
  • 当指数很大的时候上面的方法就有些慢,这里我们就学习一下快速幂的方法

例如我们求
211=2(1011)2=28×1×24×0×22×1×21×1\begin{aligned} 2^{11} &amp;=2^{(1011)_{2}} \\&amp;=2^{8}\times1\times2^{4}\times0\times2^{2}\times1\times2^{1}\times1 \end{aligned} 211​=2(1011)2​=28×1×24×0×22×1×21×1​
通过观察上式,我们可以将指数转化为2进制,变量Ans记录结果,变量T记录当前二进制对应的值,不难发现二进值每高一位,对应的T=T2\ T=T^{2} T=T2,而二进制的状态0和1表示是否要乘上T

typedef long long LL;
LL quick_pow(LL a, LL b, LL p) {LL t = a;LL ans = 1;while (b) {if (b & 1) // 判断当前二进制是否为1ans = (ans * t) % p;     // 如果为1更新anst = (t * t) % p; // 更新下一位的值,并把指数的二进制后移一位b >>= 1;}return ans;
}

第二次讲课内容(函数和快速幂)相关推荐

  1. pow函数与快速幂(优化)(O(logn)的复杂度)

    我们发现,在int型下使用pow函数求5的三次方,结果为124. 如图: 原因: pow函数的返回值为double型,因浮点数长度问题,存在截断误差. 解决方法: 将变量定义为double型 有没有更 ...

  2. Happy 2004(积性函数、快速幂取模、费马小定理、求因数和)

    happy 2004 题目 积性函数 求因数和 费马小定理 定理 取模 加减法 乘法 除法 结论 推导 快速幂取模 快速幂 快速幂取模 题目代码 坑点 题目 Consider a positive i ...

  3. c语言的 pow函数是快速幂吗,leetcode 50. Pow(x, n)(快速幂)

    就是一个二分法快速幂. 但是需要注意的问题是这里是实数,而且n可能为负. int的范围是-2,147,483,648 至 2,147,483,647.如果为-2,147,483,648那么直接n=-n ...

  4. 第二十七章 数论——快速幂与逆元

    第二十七章 快速幂与扩展欧几里德算法 一.快速幂 1.使用场景 2.算法思路 (1)二进制优化思想 (2)模运算法则 3.代码实现 (1)问题 (2)代码 二.快速幂求逆元 1.什么是逆元? (1)同 ...

  5. bzoj 1409 Password 矩阵快速幂+欧拉函数

    可以发现,该数组的mi就是斐波那契数列 所以要矩阵快速幂搞出第n位 但是斐波那契数列上涨的很快,这就需要欧拉定理了 p^phi(q)%q=1(gcd(p,q)==1) p是素数,所以可以用 然后需要5 ...

  6. POJ 3696 欧拉函数+快速幂

    题目的意思大概就是问是否存在一串全是8的数字是L的倍数 直接想没有什么想法,要想到用简洁的形式将这个数字表示出来,对于每一位都是8的数字我们可以用 X=8*(10k-1)/9的形式表示出来,那么题目的 ...

  7. python pow函数——幂运算 快速幂算法实现思路

    说明 python 内置pow函数用于实现幂的运算,在这里我使用的是快速幂算法实现pow函数功能. 快速幂 快速幂算法本质上基于的是分治思想. 优点:其时间复杂度为 O (log₂N), 与暴力遍历时 ...

  8. 牛客 华华给月月出题 (积性函数+欧拉筛+快速幂)

    题目描述 华华刚刚帮月月完成了作业.为了展示自己的学习水平之高超,华华还给月月出了一道类似的题: ⊕符号表示异或和,详见样例解释. 虽然月月写了个程序暴力的算出了答案,但是为了确保自己的答案没有错,希 ...

  9. 牛客网j题(快速幂取模阶乘处理贝塔函数费马定理)

    传送门 求(贝塔函数运用) Γ(x)=∫01(x−x2)ndx=(n!)2/(2n+1)!\Gamma(x) = \int_0 ^1\ (x-x^2)^{n}dx=(n!)^2/(2n+1) !Γ(x ...

最新文章

  1. mysql 表空间收缩_mysql表碎片清理和表空间收缩
  2. MySQL---数据库从入门走向大神系列(十二)-构建MVC项目
  3. 照片识别出错_2.GQI2021强电专业点式专业图元识别连载
  4. 33岁想从头学做网页设计_从头开始设计精美的移动应用
  5. 实例14:python
  6. C++11 并发指南五(std::condition_variable 详解)
  7. c 宏变量/宏函数/log
  8. Python——常用Python包的学习笔记
  9. 存档位置_胶带输送机综合保护装置安装位置 技术标准(试行)
  10. android之LitePal 3.0 的基本使用
  11. 如何解决数据流转「不可能三角」难题?
  12. 英语面试:应聘原因篇(转)
  13. 前端开发常用PhotoShop快捷键整理(更新中)
  14. 祝福丨TF中文社区成立一周年
  15. jffs2的目录项查找过程
  16. 网站商务通与百度商桥的区别
  17. 【MDCC 2016】iOS开发峰会回顾:实战Coding演示 技术大牛带你起飞
  18. 前端_快速入门Vue.js框架
  19. 基于python实现的猿眼电影订票系统
  20. 分享些发表技术类文章的平台

热门文章

  1. 2013 ACM/ICPC 亚洲区 杭州站
  2. java快速寻找一个数组的最大值或最小值, min, max,三种方法
  3. 图解集合8:红黑树的移除节点操作
  4. HDU 5919 Sequence II 主席树
  5. 设计模式-单例模式(1)
  6. .net门槛是否真的很低?
  7. C# 系统应用之清空回收站操作
  8. G6 图可视化引擎——简介
  9. 【Qt】数据库实战(三)
  10. 【Qt】2D绘图之复合模式