题意

  求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*(n+1)*(2*n+1)+15*n*(n+1)-6*n)

  先求出S(n),利用容斥原理去掉是n的质因子的倍数的数的四次幂之和。。。

  1 #include<iostream>
  2 #include<algorithm>
  3 #include<cstring>
  4 #include<vector>
  5 #define N 100100
  6 #include<cstdio>
  7 using namespace std;
  8 typedef long long ll;
  9 const ll mod=1000000007;
 10 bool p[N];
 11 int s[N];
 12 vector<int>factor;
 13 void prime(){
 14     memset(p,1,sizeof(p));
 15     for(int i=2;i*i<N;i++)
 16         for(int j=i;i*j<N;j++)
 17             p[i*j]=0;
 18     s[0]=0;
 19     for(int i=2;i<N;i++)
 20         if(p[i])s[++s[0]]=i;
 21 }
 22
 23 ll exgcd(int a,int b,ll &x,ll &y){
 24     if(b==0){
 25         x=1;
 26         y=0;
 27         return a;
 28     }
 29     ll d=exgcd(b,a%b,x,y);
 30     ll t=x;
 31     x=y;
 32     y=t-(a/b)*y;
 33     return d;
 34 }
 35 void div(ll n){          //分解因式
 36     factor.clear();
 37     for(int i=1;s[i]*s[i]<=n;i++){
 38         if(n%s[i]==0){
 39             factor.push_back(s[i]);
 40             while(n%s[i]==0)n/=s[i];
 41         }
 42     }
 43     if(n>1)factor.push_back(n);
 44 }
 45
 46 ll calsum(ll n){
 47     ll a1=6*(n*n%mod)*(n*n%mod)%mod*n%mod;
 48     ll a2=15*n%mod*n%mod*(n+1)%mod*(n+1)%mod;
 49     ll a3=10*n%mod*(n+1)%mod*(2*n+1)%mod;
 50     ll a4=15*n%mod*(n+1)%mod;
 51     ll a5=6*n%mod;
 52     ll ans=(a1+a2-a3+a4-a5)%mod;
 53     return ans;
 54 }
 55 ll sum(ll n){     //求和
 56     ll ans=calsum(n);
 57     ll x,y;
 58     ll d=exgcd(30,mod,x,y);
 59     x*=ans;
 60     x=(x%mod+mod)%mod;
 61     return x;
 62 }
 63
 64 ll Mod(ll a,ll b){
 65     return a*a%mod*a%mod*a%mod*b%mod;
 66 }
 67
 68 void solve(ll n){
 69     div(n);
 70     ll ans=sum(n);
 71     int c=factor.size();
 72     for(int i=1;i<(1<<c);i++){//容斥原理
 73         ll num=1;
 74         int a=0;
 75         int cnt=0;
 76         int ii=i;
 77         while(ii>0){
 78             if(ii&1){
 79                 num*=factor[cnt];
 80                 ++a;
 81             }
 82             ii>>=1;
 83             ++cnt;
 84         }
 85         ll cc=Mod(num,sum(n/num));
 86         if(a&1){
 87             ans=(ans-cc+mod)%mod;
 88         }else{
 89             ans=(ans+cc)%mod;
 90         }
 91     }
 92     cout<<ans<<endl;
 93 }
 94
 95 int main(){
 96 //    freopen("test.out","w",stdout);
 97     ll n,m;
 98     int t;
 99     prime();
100     cin>>t;
101     while(t--){
102         cin>>n;
103         solve(n);
104     }
105     return 0;
106 }

转载于:https://www.cnblogs.com/silver-bullet/archive/2012/10/11/2732287.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 容斥

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

  3. hdu 1800 Flying to the Mars

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

  4. hdu 1800 Flying to the Mars

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

  5. 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 ...

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

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

  7. c语言一维数组转化为二维矩阵,js将一维数组转化为二维数组

    遇到的问题: 后端返回的是一组一维数组,但是需要展示的格式是二维数组,常见的场景举例:后台返回10个长度的数组,需要分成3个一组展示在banner上. 例:[1,2,3,4,5,6,7,8,9,10] ...

  8. c语言容斥原理,容斥原理 | 易学教程

    容斥原理 \(|A_1\cup A_2\cup...\cup A_n|=\sum\limits_{1\le i\le n}|A_i|-\sum\limits_{1\le i 二项式反演 形式1 \(f ...

  9. 莫比乌斯,欧拉函数题目练习(完结)

    Starttime:2020/11/16Start\ time:2020/11/16Start time:2020/11/16 Lastupdatetime:2020/11/28Last\ updat ...

最新文章

  1. 从零开始学ios开发(十二):Table Views(中)UITableViewCell定制
  2. SharePoint Adventures : Using Claims with Reporting Services
  3. LTE: UE特定的参考信号
  4. RabbitMQ使用详解
  5. 你真的会使用assert吗?
  6. echart 折线图设置y轴单位_如何让echarts中y轴的单位位于数值的右上角
  7. 用Broadcast广播在activity之间、fragment之间、activity和fragment之间相互传数据
  8. centos7 yum下载路径
  9. thinkPHP学习笔记
  10. 如何利用云原生技术构建现代化应用?
  11. Java并发Semaphore信号量的学习
  12. 1.SpringMVC 概述
  13. python可以手眼定标吗_手眼标定 相关实例(示例源码)下载 - 好例子网
  14. 《ASP网络编程从入门到精通》
  15. 阿里云解决方案架构师李晨:百万级价签系统的实时洞察与创新实践
  16. 人工智能基础——2.3.2产生式系统
  17. Scratch编程(九)扩展模块:翻译模块
  18. Android开发之自定义DataTimePicker(日期时间选择器)
  19. 导出Excel支持锁定表头
  20. 【js+html禁用截屏,打印,另存为】

热门文章

  1. html自定义实现文本编辑器,自定义开发富文本编辑器(Javascript实现点击插入内容到textarea光标处)...
  2. 4.5.1 RIP协议与距离向量算法
  3. DSP学习初阶的一些笔记
  4. mysql子查询为什么不走索引_解决MySQL中IN子查询会导致无法使用索引问题
  5. 机器学习-Andrew Ng课程笔记
  6. 从源码分析DEARGUI之add_color_int和4
  7. 语音识别|基于CNN+DFSMN(简化版:标量+无步长因子)的声学模型实现及代码开源(keras)
  8. 26期Linux20180531 单用户 救援模式 克隆虚拟机 linux机器相互登录
  9. JAVA post和get方式请求远程HTTP接口
  10. Beta冲刺随笔集合