正在载入在线练习界面,本页内容可直接阅读…
AK CSP › CSP-J 2022 第一轮真题 › 第 39 题
CSP-J 2022 第一轮 第 39 题:枚举因数:⑤处应填
题目
(枚举因数)从小到大打印正整数 $n$ 的所有正因数。
试补全枚举程序。
#include <bits/stdc++.h>
using namespace std;
int main(){
int n;
cin >> n;
vector<int> fac;
fac.reserve((int)ceil(sqrt(n)));
int i;
for (i = 1; i * i < n; ++i){
if (①){
fac.push_back(i);
}
}
for (int k = 0; k < fac.size(); ++k){
cout << ② << "";
}
if (③) {
cout << ④ << "";
}
for (int k = fac.size() - 1; k >= 0; --k){
cout << ⑤ << "";
}
}
本小题
⑤处应填( )
选项
- A. n / fac[k]
- B. fac[k]
- C. fac[k]-1
- D. n / (fac[k]-1)
答案
A
题解
选 A:n / fac[k]。
因数总是成对出现:如果 d 是 n 的因数,那么 n / d 也是。
前面的循环把小于 $\sqrt n$ 的因数从小到大存进 fac。最后一个循环倒序遍历 fac,输出对应的 n / fac[k],就能让大于 $\sqrt n$ 的因数也从小到大输出。
例如 n = 36:
fac中存的是1, 2, 3, 4;- 先输出这些小因数,再单独输出平方根
6; - 倒序取
4, 3, 2, 1,输出36 / 4, 36 / 3, 36 / 2, 36 / 1,即9, 12, 18, 36。
因此⑤应填: ``cpp n / fac[k] ``
真题版权归 CCF 所有,本站仅用于非商业教学用途。页面加载后可直接在线作答,作答记录保存在本浏览器或账号中。 京ICP备2026056990号-1
京公网安备11010502062986号