共48道题,当前是第2

初赛真题

阅读以下程序,完成相关问题

01 #include<bits/stdc++.h>
02 using namespace std;
03 const int mod = 2048;
04 long long c, n;
05 long long kasumi(long long x, long long mi) {
06     long long res = 1;
07     while (mi) {
08         if (mi & 1) {
09             res = (res * x) % mod;
10         }
11         x = (x * x) % mod;
12         mi >>= 1;
13     }
14     return res;
15 }
16 int main() {
17     cin >> n >> c;
18     if (n == 3) {
19         printf("%lld", c * (c - 1));
20         return 0;
21     }
22     long long ans = ((kasumi(c - 1, n) + (c - 1) * kasumi(-1, n)) 
23                     % mod + mod) % mod;
24     cout << ans;
25     return 0;
26 }

1. A 2. A 3. B 4. A 5. C 6. C 该段代码是使⽤快速幂计算某个数的指数幂: 如果 $n == 3, ans = c * (c - 1)$ 否则 $ans = ((c-1)^n + (c-1) * (-1)^n)$

Question

1.将第 9 ⾏ res = (res * x) % mod; 和第 11 ⾏ x = (x * x) % mod; 的括号去掉,程序输出结果⼀定不变。( )

2.将第 12 ⾏的 mi >>= 1 改为 mi /= 2 ,程序输出结果⼀定不变。( )

3.若输⼊为 4 4 ,则输出为 78 。( )

4.此程序的时间复杂度为 $O(logn)$

5.若输⼊为 3 4 ,则输出为( )。

6.kasumi(2046, 13) 的返回值为( )。

陈伦制作 版权所无 粤ICP备16127491号-1