http://acm.hdu.edu.cn/showproblem.php?pid=4059

题意:给出一个n,求1~n里面与n互质的数的四次方的和是多少。

思路;不知道1~n的每个数的四次方的求和公式。看的是这篇:http://blog.csdn.net/acm_cxlove/article/details/7434864

求和公式:(1^4+2^4+……+n^4)=(n*(n+1)*(2n+1)*(3*n*n+3*n-1))/30;

然后先求出1~n的每个数的四次方的求和,然后再减去n的因子的四次方的求和。

把n的因子的质因子找出来,然后使用容斥原理去做。

容斥原理里面有一个点:例如要求所有2的倍数的因子,n是8的话,就有因子2,4,6,8,求这些的四次方的和就可以转化为2 ^ 4 * (1 ^ 4 + 2 ^ 4 + 3 ^ 4 + 4 ^ 4)。就是f_pow(prime[i], 4) * calsum(n / prime[i])。

除以30就是乘以30的逆元,就是f_pow(30, MOD-2);

 #include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int MOD = 1e9 + ;
const int N = 1e5 + ;
// (1^4+2^4+……+n^4)=(n*(n+1)*(2n+1)*(3*n*n+3*n-1))/30;
LL inver, n;
int prime[N], not_prime[N], cnt;
vector<LL> fac; void Biao() {
cnt = ;
for(int i = ; i <= N; i++) {
if(not_prime[i]) continue;
prime[cnt++] = i;
for(int j = * i; j <= N; j += i) not_prime[j] = ;
}
} LL f_pow(LL a, LL b) {
LL ans = ;
a %= MOD, b %= MOD;
while(b) {
if(b & ) ans = ans * a % MOD;
a = a * a % MOD;
b >>= ;
}
return ans % MOD;
} LL calsum(LL n) {
LL ans = n;
ans = ans * ((n + ) % MOD) % MOD;
ans = ans * (( * n + ) % MOD) % MOD;
ans = ans * ((( * n * n % MOD) + ( * n % MOD) - + MOD) % MOD) % MOD;
ans = ans * inver % MOD;
return ans;
} void solve() {
fac.clear();
LL tmp = n;
for(int i = ; i < cnt; i++) {
if(tmp % prime[i] == ) {
fac.push_back(prime[i]);
while(tmp % prime[i] == ) tmp /= prime[i];
}
}
if(tmp > ) fac.push_back(tmp);
LL ans = calsum(n);
int sz = fac.size();
for(int st = ; st < ( << sz); st++) {
int num = , bit = ; LL now = ;
while(( << bit) <= st) {
if(st & ( << bit)) num++, now *= fac[bit];
bit++;
}
LL res = f_pow(now, 4LL) * (calsum(n / now) % MOD) % MOD;
if(num % ) ans = (ans - res + MOD) % MOD;
else ans = (ans + res + MOD) % MOD;
}
printf("%lld\n", ans);
} int main() {
inver = f_pow(30LL, MOD - );
// printf("%lld\n", inver);
Biao();
int t; scanf("%d", &t);
while(t--) {
scanf("%lld", &n);
solve();
}
return ;
}

最新文章

  1. SQL性能优化:如何定位网络性能问题
  2. BlackBerry 9900刷机
  3. thinkphp分页搜索条件带中文参数
  4. JTable只要一双击就进入编辑状态,禁止的方法实现
  5. 数据结构-String、char
  6. 【原创】大叔问题定位分享(19)spark task在executors上分布不均
  7. mac 全角/半角标点符号切换
  8. Python_str 的内部功能介绍
  9. 如何使用 Excel 对象将 DataGridView 数据导出到 Excel
  10. C语言程序设计II—第六周教学
  11. 51nod 1277 字符串中的最大值
  12. BZOJ4650: [Noi2016]优秀的拆分(hash 调和级数)
  13. Linux-- 文件编辑器 vi/vim(2)
  14. jquery判断元素的子元素是否存在
  15. UML类图概述、设计模式
  16. 第07章-Spring MVC 的高级技术
  17. HttpWebRequest post上传文件
  18. 福州三中基训day2
  19. P3231 [HNOI2013]消毒
  20. laravel easywechat服务器故障问题

热门文章

  1. 存储过程和输出分辨率表菜单JSON格式字符串
  2. Debian7离线升级bash漏洞—然后修复方法
  3. Emgu-WPF学习使用 - 颜色映射
  4. vs2015 生成 cordova 页面中文乱码
  5. WPF之MahApps.Metro下载和WPF学习经验
  6. PySide——Python图形化界面入门教程(二)
  7. ML:吴恩达 机器学习 课程笔记(Week9~10)
  8. ML:单变量线性回归(Linear Regression With One Variable)
  9. 浅议Delphi中的Windows API调用(举的两个例子分别是String和API,都不错,挺具有代表性)
  10. 在mac上尝试docker-swarm