hdu 4059 数论+高次方求和+容斥原理
http://acm.hdu.edu.cn/showproblem.php?
pid=4059
现场赛中通过率挺高的一道题 可是容斥原理不怎么会。。
參考了http://blog.csdn.net/acm_cxlove/article/details/7434864
1、求逆元 p=1e9+7是素数。所以由 a^(p-1)%p同余于1 可得a%p的逆元为a^(p-2)
2、segma(i^k)都能够通过推导得到求和公式 详见http://blog.csdn.net/acm_cxlove/article/details/7434864
3、容斥原理。还在恶补中 代码写的挺美丽
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <set>
#include <cmath>
#include <vector>
using namespace std;
#define ll long long
#define IN(s) freopen(s,"r",stdin)
#define OUT(s) freopen(s,"w",stdout) const int MOD = 1000000007;
const int N = 10005;
const int M = 10050;
ll n,thr;//thr 30的逆元
vector<int>fac; bool is[N]; int prm[M];
int getprm(int n){
int i, j, k = 0;
int s, e = (int)(sqrt(0.0 + n) + 1);
memset(is, 1, sizeof(is));
prm[k++] = 2; is[0] = is[1] = 0;
for(i = 4; i < n; i += 2) is[i] = 0;
for(i = 3; i < e; i += 2) if(is[i]) {
prm[k++] = i;
for(s = i * 2, j = i * i; j < n; j += s)
is[j] = 0;
// 由于j是奇数,所以+奇数i后是偶数,不必处理!
}
for( ; i < n; i += 2) if(is[i]) prm[k++] = i;
return k; // 返回素数的个数
} ll qmod(ll x,ll t)
{
ll ret=1,base=x;
while(t)
{
if(t&1)ret=(ret*base)%MOD;
base=(base*base)%MOD;
t/=2;
}
return ret;
} ll sum(ll x)
{
ll ret=1;
ret=(ret*x)%MOD;
ret=(ret*(x+1))%MOD;
ret=(ret*((2*x+1)%MOD))%MOD;
ret=(((3*x*x)%MOD+(3*x)%MOD-1+MOD)%MOD*ret)%MOD;
return (ret*thr)%MOD;
} inline ll four(ll x)
{
return (((x%MOD)*x%MOD)*x%MOD)*x%MOD;
} ll dfs(int cur, ll tmp)//容斥原理
{
ll ret=0,f;
for(int i=cur;i<fac.size();i++)
{
f=fac[i];
ret=(ret+(sum(tmp/f)*four(f))%MOD)%MOD;
ret=( (ret-dfs(i+1,tmp/f)*four(f))%MOD+MOD )%MOD;
}
return ret%MOD;
} int main()
{
//IN("hdu4059.txt");
int ncase;
ll s1,s2;
scanf("%d",&ncase);
int prmnum=getprm(N-1);
thr=qmod(30,MOD-2);
while(ncase--)
{
scanf("%I64d",&n);
//int sn=(int)sqrt(n);
fac.clear();
ll tmp=n;
for(int i=0;i<prmnum && prm[i]<=tmp;i++)
{
if(tmp%prm[i] == 0)
{
fac.push_back(prm[i]);
while(tmp%prm[i] == 0)
tmp/=prm[i];
}
}
//while(tmp%prm[i] == 0)fac.push_back(prm[i]),tmp/=prm[i];
if(tmp!=1)fac.push_back(tmp);
//cout << "FUck= " << sum(n) << endl;
printf("%I64d\n",( (sum(n)- dfs(0,n)+MOD)%MOD + MOD)%MOD );
}
return 0;
}
hdu 4059 数论+高次方求和+容斥原理的更多相关文章
- HDU 4059 The Boss on Mars(容斥原理 + 四次方求和)
传送门 The Boss on Mars Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- HDU 4059 The Boss on Mars 容斥原理
The Boss on Mars Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- HDU 4059 容斥原理+快速幂+逆元
E - The Boss on Mars Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64 ...
- HDU 4059 容斥初步练习
#include <iostream> #include <cstring> #include <cstdio> #include <algorithm> ...
- hdu 4507 数位dp(求和,求平方和)
http://acm.hdu.edu.cn/showproblem.php?pid=4507 Problem Description 单身! 依旧单身! 吉哥依旧单身! DS级码农吉哥依旧单身! 所以 ...
- Day3:T1数论+高精 T2搜索
T1:数论+高精(水~) 根据题意可知,从除的数越大越好(在0~9中) 所以我们只要用到高精除然后再模拟一下就可以了 //MARK:但是要注意0-9这个特殊值需要特判,因为题目要求输出的数至少是两位数 ...
- akoj-1153-p次方求和
p次方求和 Time Limit:1000MS Memory Limit:65536K Total Submit:196 Accepted:46 Description 一个很简单的问题,求1^p+ ...
- GCD and LCM HDU 4497 数论
GCD and LCM HDU 4497 数论 题意 给你三个数x,y,z的最大公约数G和最小公倍数L,问你三个数字一共有几种可能.注意123和321算两种情况. 解题思路 L代表LCM,G代表GCD ...
- HDU 4059:The Boss on Mars(数学公式+容斥原理)
http://acm.hdu.edu.cn/showproblem.php?pid=4059 题意:给出一个n,求1~n里面与n互质的数的四次方的和是多少. 思路:不知道1~n的每个数的四次方的求和公 ...
随机推荐
- 10.2(java学习笔记)JDBC事务简述
一.事务 事务是指作为一系列操作组成的一个整体,该整体只有两种状态,要么全部执行,要么全部不执行. 当组成这个事务的所有语句都执行成功则该事务执行,只要有一条语句执行失败则该事务不执行. 假设这里有一 ...
- 求满足n^2>12000的n的最大值 Exercise05_13
/** * @author 冰樱梦 * 时间:2018年下半年 * 题目:求满足n^2>12000的n的最大值 * */ public class Exercise05_13 { public ...
- Scala实战高手****第5课:零基础实战Scala函数式编程及Spark源码解析
Scala函数式编程 ----------------------------------------------------------------------------------------- ...
- Spring学习——DI(依赖注入)
IOC容器,处理对象依赖关系 IOC与DI: IOC :是一个容器,创建对象的容器 DI :在容器创建对象后,处理对象的依赖关系,也叫依赖注入! 方式1:通过set方法注入值 可以给普通属性.集合属性 ...
- iOS开发——随机数的使用
1).arc4random() 比较精确不需要生成随即种子 使用方法 : 通过arc4random() 获取0到x-1之间的整数的代码如下: ...
- Visual Studio 断点无法命中怎么办?
经常远程调试服务器打断点是空心的,很抓狂,正确的方法应该是 #if DEBUG if (System.Diagnostics.Debugger.IsAttached) { System.Diagnos ...
- delphi中使用mediaplayer控件播放音乐
新建一个名字为media的文件夹,把要播放的音乐文件放在这个文件夹里. ExtractFilePath是用来获得产生的可执行程式所在的路径,因为我们把要播放的音乐文件放在了可执行程式的那个根目录下. ...
- javascript 常用手势 分析
javascript 常用手势, 个人觉得有3个 tap,swipe(swipeLeft,swipeRight,swipeTop,swipeRight),hold tap 是轻击 判断的原则是,在to ...
- Echart学习
制表,展示好帮手,自己看官方文档吧,有示例和入门指导 参考:1.http://echarts.baidu.com/tutorial.html#5%20%E5%88%86%E9%92%9F%E4%B8% ...
- 一起來玩鳥 Starling Framework(8)BitmapFont
所謂BitmapFont,就是事先將我們會用到的字型,會用到的字,輸出成一張圖片,類似Sprite sheet,以及一個xml格式的Data file,然後我們一次將這文字圖片轉成Texture,up ...