欢迎光临
我们一直在努力

信奥赛C++提高组csp-s之快速幂(案例实践3)

信奥赛C++提高组csp-s之快速幂(案例实践3)

在这里插入图片描述

题目描述

今天小明学习了组合数,现在他很想知道

C

n

i

\\sum \\rm{C}_{n}^{i}

Cni 是多少。其中

C

\\rm{C}

C 是组合数(即

C

n

i

\\rm{C}_{n}^{i}

Cni 表示

n

n

n 个物品无顺序选取

i

i

i 个的方案数),

i

i

i 取从

0

0

0

n

n

n 的所有偶数。

由于答案可能很大,请输出答案对

6662333

6662333

6662333 的余数。

输入格式

输入仅包含一个整数

n

n

n

输出格式

输出一个整数,即为答案。

输入输出样例 1
输入 1

3

输出 1

4

说明/提示

对于

20

%

20\\%

20% 的数据,

n

20

n \\le 20

n20

对于

50

%

50\\%

50% 的数据,

n

10

3

n \\le 10^{3}

n103

对于

100

%

100\\%

100% 的数据,

n

10

18

n \\le 10^{18}

n1018

分析思路

题目要求计算组合数

C

n

i

\\mathrm{C}_n^i

Cni 中所有偶数

i

i

i 的和。利用二项式定理:

  • (

    1

    +

    1

    )

    n

    =

    i

    =

    0

    n

    C

    n

    i

    =

    2

    n

    (1+1)^n = \\sum_{i=0}^n \\mathrm{C}_n^i = 2^n

    (1+1)n=i=0nCni=2n

  • (

    1

    1

    )

    n

    =

    i

    =

    0

    n

    (

    1

    )

    i

    C

    n

    i

    =

    {

    1

    n

    =

    0

    0

    n

    >

    0

    (1-1)^n = \\sum_{i=0}^n (-1)^i \\mathrm{C}_n^i = \\begin{cases} 1 & n=0 \\\\ 0 & n>0 \\end{cases}

    (11)n=i=0n(1)iCni={10n=0n>0

两式相加得: $ 2\\sum_{i\\text{为偶数}} \\mathrm{C}_n^i = 2^n + (1-1)^n. $ 当

n

=

0

n=0

n=0 时,

(

1

1

)

0

=

1

(1-1)^0 = 1

(11)0=1,所以和为

1

1

1; 当

n

1

n\\ge 1

n1 时,

(

1

1

)

n

=

0

(1-1)^n = 0

(11)n=0,所以和为

2

n

1

2^{n-1}

2n1

因此答案直接由

2

n

1

m

o

d

6662333

2^{n-1} \\bmod 6662333

2n1mod6662333 给出(

n

1

n\\ge 1

n1),

n

=

0

n=0

n=0 时输出

1

1

1。由于

n

n

n 最大可达

10

18

10^{18}

1018,需要用快速幂取模计算。

代码实现

#include <bits/stdc++.h>
using namespace std;
typedef long long ll; // 定义长整型别名
const ll MOD = 6662333; // 题目给定的模数

// 快速幂函数:计算 (a^b) % mod
ll qpow(ll a, ll b, ll mod) {
ll res = 1; // 初始化结果为 1
a %= mod; // 先取模,防止溢出
while (b) { // 当指数不为0时循环
if (b & 1) // 如果当前二进制位为1
res = res * a % mod; // 累乘当前底数并取模
a = a * a % mod; // 底数平方并取模
b >>= 1; // 指数右移一位
}
return res; // 返回结果
}

int main() {
ll n;
cin >> n;
// 根据推导:n=0 时答案为 1,否则答案为 2^(n-1) mod MOD
if (n == 0) {
cout << 1 << endl;
} else {
cout << qpow(2, n 1, MOD) << endl; // 快速幂计算
}
return 0;
}

功能分析

  • 输入处理:读取一个整数

    n

    n

    n,范围

    0

    n

    10

    18

    0 \\le n \\le 10^{18}

    0n1018

  • 核心算法:利用组合数性质直接转化为

    2

    n

    1

    m

    o

    d

    M

    O

    D

    2^{n-1} \\bmod MOD

    2n1modMOD

    n

    1

    n\\ge 1

    n1),使用快速幂在

    O

    (

    log

    n

    )

    O(\\log n)

    O(logn) 时间内完成计算。

  • 边界处理:单独处理

    n

    =

    0

    n=0

    n=0 的情况,输出

    1

    1

    1

  • 空间复杂度:仅使用常数个变量,

    O

    (

    1

    )

    O(1)

    O(1)

  • 正确性:推导基于二项式定理,数学上严格成立;快速幂算法保证大指数下的高效取模运算,结果与直接累加组合数一致(但后者无法处理

    n

    n

    n 极大时的计算)。

更多系列知识,请查看专栏:《信奥赛C++提高组csp-s知识详解及案例实践》: https://blog.csdn.net/weixin_66461496/category_13113932.html


各种学习资料,助力大家一站式学习和提升!!!

#include<bits/stdc++.h>
using namespace std;
int main(){
cout<<"########## 一站式掌握信奥赛知识! ##########";
cout<<"############# 冲刺信奥赛拿奖! #############";
cout<<"###### 课程购买后永久学习,不受限制! ######";
return 0;
}

1、csp信奥赛高频考点知识详解及案例实践:

CSP信奥赛C++动态规划: https://blog.csdn.net/weixin_66461496/category_13096895.html点击跳转

CSP信奥赛C++标准模板库STL: https://blog.csdn.net/weixin_66461496/category_13108077.html 点击跳转

信奥赛C++提高组csp-s知识详解及案例实践: https://blog.csdn.net/weixin_66461496/category_13113932.html

2、csp信奥赛冲刺一等奖有效刷题题解:

CSP信奥赛C++初赛及复赛高频考点真题解析(持续更新):https://blog.csdn.net/weixin_66461496/category_12808781.html 点击跳转

信奥赛C++提高组csp-s初赛&复赛真题题解(持续更新) https://blog.csdn.net/weixin_66461496/category_13125089.html

3、GESP C++考级真题题解:

在这里插入图片描述

GESP(C++ 一级+二级+三级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12858102.html 点击跳转

在这里插入图片描述

GESP(C++ 四级+五级+六级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12869848.html 点击跳转

在这里插入图片描述 GESP(C++ 七级+八级)真题题解(持续更新): https://blog.csdn.net/weixin_66461496/category_13117178.html

4、csp/信奥赛C++,完整信奥赛系列课程(永久学习):

https://edu.csdn.net/lecturer/7901 点击跳转

· 文末祝福 ·

#include<bits/stdc++.h>
using namespace std;
int main(){
cout<<"跟着王老师一起学习信奥赛C++";
cout<<" 成就更好的自己! ";
cout<<" csp信奥赛一等奖属于你! ";
return 0;
}

赞(0)
未经允许不得转载:171主机测评 » 信奥赛C++提高组csp-s之快速幂(案例实践3)
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址