Sigma Function(数论,思维)
题意描述
给定一个整数 ,要求求出 中 为偶数的 的个数( 表示 的正约数和)。
原题链接
分析
将 素因子分解之后得到
则 的计算公式:
我们不方便研究 为偶数的情况,我们可以研究 为奇数的情况,再用总数减掉奇数的个数即可。
我们要让 为奇数,则 的每一个因子都要为奇数,所以可以分开考虑公式的每一项:
- 若 ,则 这一项一定为奇数,因为 的任何次幂都是偶数,加上 就变成了奇数。
- 对于除了 以外的其他素因子,我们想要让 为奇数,即想让 为偶数,由于素因子的任何幂次都为奇数,所以只有当项数为偶数时,才能满足其为偶数,故可以得出其素因子的次数 都为偶数
综上所述,满足 为奇数的数一定满足这样的形式:
当次数都为偶数时,这个数其实就是一个完全平方数,所以可以简写成:
那么如何统计在 中这样的数的个数呢?
- 当 为偶数时,把 这个质因子囊括进来, 就是一个完全平方数,这一部分就直接统计 当中的完全平方数就可以。
- 当 为奇数时, 就为完全平方数,所以再统计 中满足形式为 的形式的数即可。
Code:
// 原题链接:https://vjudge.net/problem/LightOJ-1336
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long LL;
int main() {
ios::sync_with_stdio(false); cin.tie(0);
int T; cin >> T;
for (int C = 1; C <= T; C ++ ) {
LL n, res = 0; cin >> n;
for (int i = 1; i <= n / i; i ++ ) {
res ++ ;
if ((LL)i * i * 2 <= n) res ++ ;
}
cout << "Case " << C << ": " << n - res << '\n';
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)