Project Euler 429 Sum of squares of unitary divisors(数论)
题目链接:
https://projecteuler.net/problem=429
题目:
A unitary divisor \(d\) of a number \(n\) is a divisor of \(n\) that has the property \(gcd(d, n/d) = 1\).
The unitary divisors of \(4! = 24\) are \(1, 3, 8\) and \(24\).
The sum of their squares is \(1^2 + 3^2 + 8^2 + 24^2 = 650\).
Let \(S(n)\) represent the sum of the squares of the unitary divisors of \(n\). Thus \(S(4!)=650\).
Find \(S(100 000 000!)\) modulo \(1 000 000 009\).
题解:
因为:\(n! = p_1^{a_1}p_2^{a_2}p_3^{a_3} \cdots p_k^{a_k}\)
所以:\(S(n!) = S(p_1^{a_1}p_2^{a_2}p_3^{a_3} \cdots p_k^{a_k}) = S(p_1^{a_1})*S(p_2^{a_2})*\cdots*S(p_k^{a_k})\)
\(=\displaystyle \prod_{i=1}^k (p_i^{2a_i}+1)\)
其实,unitary divisor 就是 \(1, p_1^{a_1}, p_2^{a_2}, p_3^{a_3}, \cdots p_k^{a_k}\)
比如: \((1 + a)(1 + b)(1 + c) = 1 + a + b + c + ab + ac + bc + abc\)
所以,他们的和就是 \(\displaystyle \prod_{i=1}^k (p_i^{a_i}+1)\)。
同理,它们的平方和就是 \(\displaystyle \prod_{i=1}^k (p_i^{2a_i}+1) = \displaystyle \prod_{i=1}^k ((p_i^{a_i})^{2}+1)\)
其中,\(\displaystyle a_i =\sum_{j=1}^{ n } \left\lfloor \frac{n}{p_i^j} \right\rfloor\)
代码:
#include <bits/stdc++.h>using namespace std;
typedef long long ll;
const int maxn = 1e8;
const int mod =1e9+9;ll qpower(ll a,ll b,ll mod)
{long long ans=1;while(b>0){if(b&1)ans=(ans*a)%mod;b>>=1;a=(a*a)%mod;}return ans;
}ll solve(ll i,ll n)
{ll res = 0;while (n) {n /= i;res += n;}
// std::cout << "res=" << res << '\n';return res;
}ll cal(ll a)
{return (1LL + a * a) % mod;
}int main(int argc, char const *argv[]) {ll ans = 1;std::vector<ll> isprime(1e8+123,1);isprime[0] = 0;isprime[1] = 0;isprime[2] = 1;for(int i=2;i<maxn;i++) {if(isprime[i]) {for(int j= i+i;j<maxn;j+=i) {isprime[j] = 0;}}}
// std::cout << "init finish" << '\n';for(ll i=2;i<maxn;i++) {// if(i%10000000==0)std::cout << "ok" << '\n';if(isprime[i]) {ll power = solve(i,maxn);ans = 1LL * ans * cal( qpower(i,power,mod) ) % mod;}}std::cout << ans << '\n';cerr << "Time elapsed: " << 1.0 * clock() / CLOCKS_PER_SEC << " s.\n";return 0;
}
转载于:https://www.cnblogs.com/LzyRapx/p/8280943.html
Project Euler 429 Sum of squares of unitary divisors(数论)相关推荐
- [Project Euler 429] Sum of squares of unitary divisors(数论)
题目链接:https://projecteuler.net/problem=429 题目: 我们称 N 的约数 d 为特殊的当且仅当 gcd(d, n / d) = 1. 设 S(n) 为 n 所有特 ...
- Project Euler
最近发现了一个很有趣的网站,Project Euler 上面全是数学题,不过大多需要用编程解决 Problem 3: 求:600851475143的最大素因子. 解:编了个程序,迅速水过,看官方的题解 ...
- Project Euler in Java [001-040]
目录:英语原题见代码注释 001_三或五的倍数 002_偶斐波那契数 003_最大质因数 004_最大乘积回文数 005_最小公倍数 006_"和的平方"与"平方的和&q ...
- Project Euler.59.yyt
Project Euler.59.yyt XOR 题目链接:http://pe-cn.github.io/59/ 解题思路: 题目中提到秘钥是由三个小写字母组成,因此可以选取一定长度的密文进行爆破. ...
- Project Euler 182.yyt
Project Euler 182.yyt 暑假作业解题记录:第182题,RSA加密 数论知识基础 python 目录 Project Euler 182.yyt 目录 数论基础和RSA加密 代码 数 ...
- 欧拉计划 Project Euler 50-56
Project Euler 50-56 Project Euler: https://projecteuler.net/ Project Euler | 欧拉计划: https://pe-cn.git ...
- 【AlgorithmTraining】03:Project Euler 03
Project Euler 03 OVERVIEW Project Euler 03 1.E22:Name score 2.E32:Pandigital products 3.E33:Digit ca ...
- R语言层次聚类:通过内平方和(Within Sum of Squares, WSS)选择最优的聚类K值、以内平方和(WSS)和K的关系并通过弯头法(elbow method)获得最优的聚类个数
通过内平方和(Within Sum of Squares, WSS)选择最佳的聚类K值.以内平方和(WSS)和K的关系并通过弯头法(elbow method)获得最佳的聚类个数 目录
- 硬币游戏 Project Euler 232
原帖:http://hi.baidu.com/atyuwen/blog/item/160bd024531e3034c995591d.html Project Euler上最近的题目都还比较意思,来看看 ...
最新文章
- HMM与条件随机场区别 转
- c莫比乌斯函数_代佳璇缘起一条莫比乌斯环,我爱上了难缠的数学!
- Linux Kernel 5.10 aarch64体系对TTBR寄存器的设置
- C语言中for语句的执行过程是什么?
- reactor p java_Java反应式框架Reactor中的Mono和Flux
- CVPR 2019 | Adobe提出新型超分辨率方法:用神经网络迁移参照图像纹理
- tornado基本使用一
- 5w1h,人机料法环
- Parallel()
- 让机器耳濡目染:MIT提出跨模态机器学习模型
- docker的安装和部署
- 2分钟实战QQ机器人教程(保姆级)手把手教你极速开发
- PHP头条爬虫,今日头条爬虫分析-爬取用户发的所有内容
- Excel查找匹配VLOOKUP用法
- oracle 批量列转行,oracle 批量列转行 逗号分隔
- 华为称鸿蒙系统支持第三方手机,“开源开放毫无保留”,欢迎厂商使用
- yolov5 教学入门使用
- antd 源码解读 notification
- PAT乙级1005,用C语言进行编程,继续卡拉兹猜想
- KRPANO资源分析工具