正在载入在线练习界面,本页内容可直接阅读…
AK CSP › NOIP 提高 2012 第一轮真题 › 第 24 题
NOIP 提高 2012 第一轮 第 24 题:欧几里得 gcd 统计约数个数
题目
```
#include <iostream>
using namespace std;
int n, i, ans;
int gcd(int a, int b)
{
if (a % b == 0) return b;
else
return gcd(b, a%b);
}
int main()
{
cin>>n;
ans = 0;
for (i = 1; i <= n; i++)
if (gcd(n,i) == i)
ans++;
cout<<ans<<endl;
}
```
输入:120
输出:________本小题
请写出程序的输出结果。
答案
16
题解
考点定位
本题考「gcd 递归与约数」,对应大纲 2.1.3 初等数论(难度【3】)。
解题过程
gcd(n,i)==i ⟺ i 整除 n 且 gcd 恰为 i——即 i 是 n 的约数。统计 120 的约数个数:
$$120=2^3\times3\times5\;\Rightarrow\;(3+1)(1+1)(1+1)=16$$
答案:16。
易错提醒
① gcd(120,i)=i ⟺ i|120(gcd 与较小数相等的条件);② 约数个数公式 Π(指数+1)。
真题版权归 CCF 所有,本站仅用于非商业教学用途。页面加载后可直接在线作答,作答记录保存在本浏览器或账号中。 京ICP备2026056990号-1
京公网安备11010502062986号