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

定义S = 1^4 + 2^4 + 3^4+.....+n^4。如今减去与n互质的数的4次方。问共降低了多少。

容斥原理。能够先把与n不互质的数的4次方求出来。那就先对n进行质因子分解,对质因子的组合运用容斥原理。质因子个数为奇数就加,偶数就减。事实上与求[1,n]内与n互质的数的个数类似,该题重点是计算,防止乘法溢出。

对于求解1^4 + 2^4 + 3^4+.....+n^4,能够先类比1^2+2^2+...+n^2的求法,那么求4次方,

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

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

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

........

........

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

将上述全部等式相加。两边抵消同样项,得到(n+1)^5 = 5*(1^4+2^4+……n^4)+10*(1^3+2^3+……+n^3)+10*(1^2+2^2+……+n^2)+5*(1+2+……+n)+n+1,

将1^3+2^3+……+n^3 = (n+1)^2*n^2/4和1^2+2^2+……+n^2
= (n*(n+1)*(2*n+1))/6带入上式,化简得到:

1^4+2^4+……n^4
= (n*(n+1)*(2n+1)*(3*n*n+3*n-1))/30。

由于要取余,要求30对1000000007的逆元,用扩展欧几里得就可以。

#include <stdio.h>
#include <iostream>
#include <map>
#include <set>
#include <bitset>
#include <list>
#include <stack>
#include <vector>
#include <math.h>
#include <string.h>
#include <queue>
#include <string>
#include <stdlib.h>
#include <algorithm>
#define LL __int64
//#define LL long long
#define eps 1e-9
#define PI acos(-1.0)
using namespace std;
const int maxn = 10010;
const LL mod = 1000000007;
LL n;
int fac[maxn];
int facCnt;
int prime[maxn];
LL ni,nii; //求30对mod的逆元。
LL extend_gcd(LL a, LL b, LL &x, LL &y)
{
if(b == 0)
{
x = 1;
y = 0;
return a;
}
LL d = extend_gcd(b,a%b,x,y);
LL t = x;
x = y;
y = t-a/b*y;
return d;
} LL pow_4(LL t)
{
LL anw =( ((t*(t+1))%mod*(2*t+1)%mod) * (((3*t*t)%mod+(3*t)%mod-1+mod)%mod )%mod*ni)%mod;
return anw;
} LL cal(LL m)
{
LL t = n/m;
LL anw1 = m;
anw1 = (anw1*m)%mod;
anw1 = (anw1*m)%mod;
anw1 = (anw1*m)%mod;
LL anw2 = pow_4(t);
LL anw = (anw1*anw2)%mod;
return anw;
} void getPrime()
{
bool flag[maxn];
memset(flag,false,sizeof(flag));
prime[0] = 0;
for(int i = 2; i < maxn; i++)
{
if(flag[i] == false)
{
prime[++prime[0]] = i;
for(int j = 1; j <= prime[0]&&prime[j]*i < maxn; j++)
{
flag[prime[j]*i] = true;
if(i%prime[j] == 0)
break;
}
}
}
} void getFac()
{
facCnt = 0;
LL tmp = n;
for(int i = 1; i <= prime[0] && prime[i]*prime[i] <= tmp; i++)
{
if(tmp % prime[i] == 0)
{
fac[facCnt++] = prime[i];
while(tmp % prime[i] == 0)
tmp /= prime[i];
}
if(tmp == 1) break;
}
if(tmp > 1)
fac[facCnt++] = tmp;
} int main()
{
int test;
scanf("%d",&test);
getPrime();
extend_gcd(30,mod,ni,nii);
while(test--)
{
scanf("%I64d",&n);
getFac();
LL ans = 0; for(int i = 1; i < (1<<facCnt); i++)
{
LL mul = 1;
int cnt = 0;
for(int j = 0; j < facCnt; j++)
{
if(i&(1<<j))
{
cnt++;
mul *= fac[j];
}
}
if(cnt&1)
ans = (ans + cal(mul) )%mod;
else
ans = (ans - cal(mul) )%mod;
}
ans = ((pow_4(n) - ans)%mod+mod)%mod; //减法时取余
printf("%I64d\n",ans);
}
return 0;
}

hdu 4059 The Boss on Mars(纳入和排除)的更多相关文章

  1. HDU 4059 The Boss on Mars 容斥原理

    The Boss on Mars Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  2. HDU 4059 The Boss on Mars(容斥原理 + 四次方求和)

    传送门 The Boss on Mars Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Oth ...

  3. 数论 + 容斥 - HDU 4059 The Boss on Mars

    The Boss on Mars Problem's Link Mean: 给定一个整数n,求1~n中所有与n互质的数的四次方的和.(1<=n<=1e8) analyse: 看似简单,倘若 ...

  4. HDU 4059 The Boss on Mars(容斥原理)

    The Boss on Mars Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  5. hdu 4059 The Boss on Mars

    The Boss on Mars Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  6. hdu 4059 The Boss on Mars 容斥

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

  7. hdu4059 The Boss on Mars(差分+容斥原理)

    题意: 求小于n (1 ≤ n ≤ 10^8)的数中,与n互质的数的四次方和. 知识点: 差分: 一阶差分: 设  则    为一阶差分. 二阶差分: n阶差分:     且可推出    性质: 1. ...

  8. HDU 4059 容斥原理+快速幂+逆元

    E - The Boss on Mars Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64 ...

  9. The Boss on Mars

    The Boss on Mars Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

随机推荐

  1. gulp快速入门

    gulp快速入门 因为之前一直有人给我推荐gulp,说他这里好哪里好的.实际上对我来说够用就行.grunt熟悉以后实际上他的配置也不难,说到效率的话如果真是要完整打包上线也不在乎那么几秒时间,对于项目 ...

  2. Java集群--大型网站是怎样解决多用户高并发访问的

    时间过得真快,再次登录博客园来写博,才发现距离上次的写博时间已经过去了一个月了,虽然是因为自己找了实习,但这也说明自己对时间的掌控能力还是没那么的强,哈哈,看来还需不断的努力啊!(这里得特别说明一下本 ...

  3. C#函数参数传递解惑

    C#语言函数参数的传递   就像C语言众多的后世子孙一样,C#的函数参数是非常讲究的.首先,参数必须写在函数名后面的括号里,这里我们有必要称其为形参.参数必须有一个参数名称和明确的类型声明.该参数名称 ...

  4. ubuntu下使用自带的openJDK查看java源码

    如题 Ubuntu自带的OpenJDK仅仅有jre环境,不提供源代码,所以我们还是须要去下载. JDK6:http://download.java.net/openjdk/jdk6/ JDK7:htt ...

  5. Cacti监控Tomcatserver实现过程

    1 首先去官网上面下载通用的监控模板 一般使用TomcatStats-0.1.zip 模板居多,下载地址: http://forums.cacti.net/download/file.php?id=1 ...

  6. ecshop首页调用指定分类的所有产品(指定一级调二级)

    第一种方法 第一 在/includes/lib_goods.php下增加如下代码,用过网上的直接换掉就可以 function index_get_cat_id_goods_best_list($cat ...

  7. 用EnableMenuItem不能使菜单变灰的原因

    为何不能Disable菜单项     问:我有一个工具button在WM_COMMAND消息是这样做的:         CMenu   *pMenu   =   GetMenu();     pMe ...

  8. windows phone 独立存储空间的操作 (2)

    原文:windows phone 独立存储空间的操作 (2) IsolatedStorage独立存储空间是保存应用程序的一些数据已经配置文件,独立存储空间相对于其他的wp程序是独立的,也就是说每个wp ...

  9. SpringMVC(转)

    http://www.cnblogs.com/liukemng/p/3725582.html

  10. .net读取异步Post的内容

    //读取微信Post过来的XML内容                 byte[] input = HttpContext.Current.Request.BinaryRead(HttpContext ...