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的每个数的四次方的求和公 ...
随机推荐
- Codeforces 138D World of Darkraft(Multi-Nim)
[题目链接] http://codeforces.com/problemset/problem/138/D [题目大意] H*W的棋盘中每个点都是L.R.X三者之一,两人轮流选一个点, 若为L则向左下 ...
- JQurey中getJSON方法错误回调方法
1.使用try...catch实现 2.换$.ajax 3.JQuery 1.5+可以这样使用: $.getJSON("example.json", function() { al ...
- springmvc-框架学习
https://www.androiddev.net/springmvc-框架学习一-helloworld/
- codeforces round #264(div2)
A题 我仅仅想说题意非常坑,一不小心就会wa,哎,不机智的我居然在最后判题的过程中错了,少加一个推断语句. 错的值了,你说呢? #include<map> #include<cm ...
- 学习实践:使用模式,原则实现一个C++数据库訪问类
一.概述 在我參与的多个项目中.大家使用libMySQL操作MySQL数据库,并且是源代码级复用,在多个项目中同样或相似的源代码.这种复用方式给开发带来了不便. libMySQL的使用比較麻烦.非常e ...
- Qt 之 模仿 QQ登陆界面——样式篇
一.简述 今天晚上花了半天时间从QQ登录界面抠了些图,顺便加了点样式基本上实现了QQ的登陆界面全部效果.虽不说100%相似,那也有99.99%相似了哈O(∩_∩)O. QQ好像从去年开始,登录界面有了 ...
- Linux下sqlite3编程
---------------------------------------------------------------------------------------------------- ...
- virtualbox虚拟机ubuntu操作系统,设置网络互通、访问,能访问虚拟机swoole的http服务
网络互通 1.设置virtualbox网络连接模式为桥接网卡模式 2.重启虚拟机查看虚拟机IP ifconfig 3.开启window的telnet程序 控制面板->程序->启用或关闭wi ...
- 文档对象模型-DOM(一)
首先看一下DOM树结构: 每个节点都是一个对象,拥有方法和属性. 脚本可以访问以及更新DOM树(不是源代码). 针对DOM树的修改都会反映到浏览器. 访问并更新DOM树需要两个步骤: 一.定位到与 ...
- Linux学习笔记 (五)关机和重启命令
一.关机命令 1.shutdown命令: shutdown [选项] [时间] 选项: -c:取消前一个关机命令 -h:关机 -r:重启 例:shutdown -r 05:30 & //表 ...