题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4059

题意:给出n,求所有小于等于n的数中与n互质的数字的四次方之和,模mod=100000007

思路:总的思路,求出1到n的所有数字的四次方之和,减去和n不互质的数字的四次方之和。因此,本题需要解决以下几个问题:

(1)求1到n的四次方和的通项公式f4(n):f4(n)=n*(n+1)*(n*2+1)*(3*n*n+3*n-1)/30。推导如下:

(x+1)^5=x^5+5x^4+10x^3+10x^2+5x+1,

因此:1^5=1

2^5=(1+1)^5=1^5+5*1^4+10*1^3+10*1^2+5*1+1

3^5=(2+1)^5=2^5+5*2^4+10*2^3+10*2^2+5*2+1

……

(n+1)^5=(n+1)^5=n^5+5*n^4+10*n^3+10*n^2+5*n+1

相加得:f5(n+1)=f5(n)+5f4(n)+10f3(n)+10f2(n)+5f1(n)+n+1

即:(n+1)^5=5f4(n)+10f3(n)+10f2(n)+5f1(n)+n+1

其中 f3(n)=n^2*(n+1)^2/4

f2(n)=n*(n+1)*(2n+1)/6

f1(n)=n*(n+1)/2

带入整理得:f4(n)=n*(n+1)*(n*2+1)*(3*n*n+3*n-1)/30

(2)求出30对mod的逆元m:m=30^(mod-2)%mod。推到如下:

设b=30*a,则b%mod=a%mod*30%mod,有费马小定理x^(p-1)%p=1(p是素数且x不能整除p)可得:

30^(mod-1)%mod=1,所以:a%mod=a*1%mod=a*30^(mod-1)%mod=a*30*30^(mod-2)%mod=b*30^(mod-1)%mod

即:a=b*m%mod。

(3)容斥原理求解与n不互质的所有数的四次方之和.假设n有三个质因数2,3,5,则DFS求解的基本过程如下:

sum=0;

sum+=2的倍数-2,3的倍数+2,3,5的倍数-2,5的倍数;

sum+=3的倍数-3,5的倍数;

sum+=5的倍数。

 #include <iostream>#include <cmath>#include <cstdio>#include <cstring>#define int64 __int64using namespace std;const int64 mod=1000000007;int64 factor[35],factorNum,n,m;void init1(){int64 x=30,y=mod-2;m=1;while(y){if(y&1) m=m*x%mod;x=x*x%mod;y>>=1;}}int64 prime[60000],primeNum,isprime[60000];void init2(){int64 i,j;for(i=2;i<60000;i++){if(!isprime[i]) prime[++primeNum]=i;for(j=1;j<=primeNum&&prime[j]*i<60000;j++){isprime[prime[j]*i]=1;if(i%prime[j]==0) break;}}}int C;void cal_factor(){int64 i,p=n;factorNum=0;for(i=1;i<=primeNum&&prime[i]<=p;i++) if(p%prime[i]==0){factor[++factorNum]=prime[i];while(p%prime[i]==0) p/=prime[i];}if(p>1) factor[++factorNum]=p;}inline int64 P(int64 x){int64 ans=x%mod;ans=ans*(x+1)%mod;ans=ans*(x+x+1)%mod;ans=ans*((3*x*x+3*x-1)%mod)%mod;ans=ans*m%mod;return ans;}inline int64 Q(int64 x){return x*x%mod*x%mod*x%mod;}int64 DFS(int64 n,int64 start,int64 end,int64 factor[]){int64 ans=0,i,x,t;for(i=start;i<=end;i++){t=factor[i];ans=(ans+Q(t)*P(n/t)%mod)%mod;x=Q(t)*DFS(n/t,i+1,end,factor)%mod;ans=((ans-x)%mod+mod)%mod;}return ans;}int main(){init1();init2();for(scanf("%d",&C);C--;){scanf("%I64d",&n);cal_factor();int64 ans;ans=P(n)-DFS(n,1,factorNum,factor);ans=(ans%mod+mod)%mod;printf("%I64d\n",ans);}return 0;}

  

转载于:https://www.cnblogs.com/jianglangcaijin/archive/2012/10/01/2709778.html

HDU 4059 The Boss on Mars(容斥原理)相关推荐

  1. HDU 4059 The Boss on Mars (容斥)(2011 Asia Dalian Regional Contest)

    The Boss on Mars 思路 显然我们可以求得∑i=1ni4=6n5+15n4+10n3−n30\sum_{i = 1} ^{n} i ^ 4 = \frac{6n^5 + 15n^4 + ...

  2. hdu 4059 The Boss on Mars

    题意 求1到之间所有与n互质的数的四次幂之和. 分析 分解n^5-(n-1)^5..可以求出1^4+2^4+...+n^4的公式S(n)=1/30*(n^5+15*n^2*(n+1)^2-10*n*( ...

  3. hdu 4059 The Boss on Mars 容斥

    题目链接 求出ai^4+a2^4+......an^4的值, ai为小于n并与n互质的数. 用容斥做, 先求出1^4+2^4+n^4的和的通项公式, 显然是一个5次方程, 然后6个方程6个未知数, 我 ...

  4. hdu 1800 Flying to the Mars

    Flying to the Mars Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  5. hdu 1800 Flying to the Mars

    Flying to the Mars Time Limit : 5000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) ...

  6. hdu 1286 找新朋友 (容斥原理 || 欧拉函数)

    Problem - 1286 用容斥原理做的代码: 1 #include <cstdio> 2 #include <iostream> 3 #include <algor ...

  7. HDU 2204 Eddy's爱好(容斥原理)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2204 解题报告:输入一个n让你求出[1,n]范围内有多少个数可以表示成形如m^k的样子. 不详细说了, ...

  8. 【HDU - 5468】Puzzled Elena(容斥原理,dfs序,数学,素因子分解,有坑)

    题干: Problem Description Since both Stefan and Damon fell in love with Elena, and it was really diffi ...

  9. zoj 3547 The Boss on Mars

    需要用到概率论的容斥定理以及计算1 ^ 4 + 2 ^ 4 + --+ n ^ 4的计算公式1^4+2^4+--+n^4=n(n+1)(2n+1)(3n^2+3n-1)/30 #pragma comm ...

  10. HDU-4059 The Boss on Mars 容斥定理

    将与N不互质的数全部找出来,再应用容斥定理求得最后的结果.这题在求 a/b MOD c 的时候使用费马小定理等价于 a*b^c(-2) MOD c.用x/lnx 可以估计出大概有多少素数. 代码如下: ...

最新文章

  1. Linux crontab 命令基本说明
  2. 分析与解决windows10下上网很慢
  3. C语言实现一个随机测试加减乘除,编写程序:C语言实现一个随堂测试,能进行加减乘除运算...
  4. python 速度 memmap_从20秒到0.5秒:一个使用Rust语言来优化Python性能的案例
  5. 实验 3 编程,编译,连接,跟踪
  6. java真数组_Java真数组
  7. busybox源码剖析(1)---whoami.c
  8. 分享一百多套开发视频教程的下载地址
  9. gamepad android,传说之下虚拟手柄
  10. 简单的下载者木马分析
  11. 推荐windows下 DNS本地化工具 TreeWalk DNS 8.21
  12. 电子邮件地址怎么写?
  13. 一个amp;quot;现象级amp;quot;大数据公司的蜕变
  14. 当AI开始创作出令人惊叹的作品时 你的双眼已被蒙蔽
  15. linux设置spi时钟频率,Linux下S3C2416的SPI设置问题,CLK和MOSI都没有输出,求助
  16. C++ QT Bejeweled宝石迷阵 期末项目
  17. 中国石油大学(北京)远程教育学院机考题《操作系统》
  18. MDK自动生成版本号
  19. 数据湖架构开发-Hudi入门教程
  20. 程序员CMD命令大全

热门文章

  1. paip.验证码识别---判断图片是否是彩色图片
  2. Julia: 通过简单实践理解机器学习概念(flux.jl)
  3. 摆动定价机制连载系列之推出背景及工作原理介绍
  4. Rust : CSV库的用法
  5. Linux内核开发者大会 开始报名啦~
  6. 顶级赛事,大神现身,速来观战
  7. “混合云产业推进联盟”成立,ZStack实力助推
  8. 【图像隐写】基于matlab DCT数字水印嵌入+攻击+提取【含Matlab源码 1758期】
  9. 【太阳辐射预测】基于matlab BP神经网络太阳辐射预测【含Matlab源码 883期】
  10. 【指纹识别】基于matlab GUI指纹打卡系统【含Matlab源码 867期】