HDU 3501 Calculation 2(容斥原理、求[1,n - 1]中和n不互素的数字之和)
来源:互联网 发布:汉诺塔递归算法干嘛的 编辑:程序博客网 时间:2024/06/06 20:01
题目链接;
HDU 3501 Calculation 2
题意:
求
数据范围:
分析:
和HDU 4135 Co_prime类似。我们只需求出不互素的数字的约数是由哪些
找到最小素因子组成。共有
#include <iostream>#include <cstdio>#include <cstring>#include <string>#include <algorithm>#include <climits>#include <cmath>#include <ctime>#include <cassert>#include <vector>#define IOS ios_base::sync_with_stdio(0); cin.tie(0);using namespace std;typedef long long ll;const ll mod = (ll)(1e9) + 7;vector<ll> fac;void GetFactor(ll n){ fac.clear(); for(ll i = 2; i * i <= n; ++i) { if(n % i == 0) { fac.push_back(i); while(n % i == 0) n /= i; } } if(n > 1) fac.push_back(n);}ll solve(ll A, ll n){ ll ans = 0; int total = fac.size(); for(ll i = 1; i < (1 << total); ++i) { //用二进制位表示该位上对应编号的素因子是否选择 int bits = 0; ll res = 1; for(int j = 0; j < total; ++j) { if(i & (1 << j)) { //如果选择了第j个素因子 bits++; res *= fac[j]; } } ll t = A / res; if(bits & 1) ans += t * (t + 1) / 2 % mod * res; //选择的素因子个数为奇数个 else ans -= t * (t + 1) / 2 % mod * res; ans %= mod; } return (ans + mod) % mod;}int main(){ ll n; while(~scanf("%lld", &n) && n) { GetFactor(n); printf("%lld\n", solve(n - 1, n)); } return 0;}
0 0
- HDU 3501 Calculation 2(容斥原理、求[1,n - 1]中和n不互素的数字之和)
- hdu 3501 Calculation 2(<n且与n不互质的数之和)
- hdu 1695 hdu 4135 容斥原理求1-n 区间内与r互质的个数
- HDU 4135:Co-prime 容斥原理求(1,m)中与n互质的数的个数
- hdu 4135 容斥原理 求(1,m)区间与n互质的数的个数.
- 1、求n!;2、求1!+2!+3!+......+n!之和
- HDU 4135 Co_prime(容斥原理、[A,B]中和n互素数个数)
- 求1 到 n 的阶乘之和,n由键盘输入。
- 容斥原理的应用---求1--r中与n互素数的个数
- HDU 1215 求N的因子之和
- hdu 3501 欧拉函数(求小于n与n不互质的数之和)
- 求1~n与x互质的数的个数(6个题、容斥原理)
- 求1~n中与m互质的数的个数(m>n) 附hdu1695题解(欧拉函数+容斥原理)
- 容斥原理应用(求1~r中有多少个数与n互素)
- 容斥原理应用(求1~r中有多少个数与n互素)
- 容斥原理求1~r中有多少个数与n互素
- 容斥原理求1到n与k互质个数
- 【容斥原理】求1~n有多少个数与k互质
- JAVA环境变量配置
- AJAX知识
- 判断B是否为A的子结构
- ExtJS学习:MVC模式案例(四)
- 指针函数和函数指针的区别
- HDU 3501 Calculation 2(容斥原理、求[1,n - 1]中和n不互素的数字之和)
- HDU 2031 进制转换
- CentOS下安装中文支持及字体
- pta--树的同构
- Linux常用的命令
- 解决react-native 创建工程、init过程太慢的问题
- iOS中使用blend改变图片颜色
- 青年图摘0714!唯美背后
- Map输出方式二:foreach输出Map