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 数论+高次方求和+容斥原理的更多相关文章

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

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

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

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

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

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

  4. HDU 4059 容斥初步练习

    #include <iostream> #include <cstring> #include <cstdio> #include <algorithm> ...

  5. hdu 4507 数位dp(求和,求平方和)

    http://acm.hdu.edu.cn/showproblem.php?pid=4507 Problem Description 单身! 依旧单身! 吉哥依旧单身! DS级码农吉哥依旧单身! 所以 ...

  6. Day3:T1数论+高精 T2搜索

    T1:数论+高精(水~) 根据题意可知,从除的数越大越好(在0~9中) 所以我们只要用到高精除然后再模拟一下就可以了 //MARK:但是要注意0-9这个特殊值需要特判,因为题目要求输出的数至少是两位数 ...

  7. akoj-1153-p次方求和

    p次方求和 Time Limit:1000MS  Memory Limit:65536K Total Submit:196 Accepted:46 Description 一个很简单的问题,求1^p+ ...

  8. GCD and LCM HDU 4497 数论

    GCD and LCM HDU 4497 数论 题意 给你三个数x,y,z的最大公约数G和最小公倍数L,问你三个数字一共有几种可能.注意123和321算两种情况. 解题思路 L代表LCM,G代表GCD ...

  9. HDU 4059:The Boss on Mars(数学公式+容斥原理)

    http://acm.hdu.edu.cn/showproblem.php?pid=4059 题意:给出一个n,求1~n里面与n互质的数的四次方的和是多少. 思路:不知道1~n的每个数的四次方的求和公 ...

随机推荐

  1. 找出能被5或6整除,但是不能被两者同时整除的数 Exercise05_11

    /** * @author 冰樱梦 * 时间:2018年下半年 * 题目:找出能被5或6整除,但是不能被两者同时整除的数 * */ public class Exercise05_11 { publi ...

  2. C语言实现括号配对问题

    代码如下: #include<stdio.h> #include<string.h> #include<stdlib.h> // 写一个判断的括号是否匹配的函数 i ...

  3. 通过Roslyn动态生成程序集

    之前写过篇文章如何通过Roslyn构建自己的C#脚本,今天本来打算测试一下这部分API在新的版本中的变化,结果发现它的脚本引擎找不到了,翻了一下官方文档,貌似说暂时性的移除了.便看了一下它动态生成程序 ...

  4. 集合视图UICollectionView 介绍及其示例程序

    UICollectionView是一种新的数据展示方式,简单来说可以把它理解成多列的UITableView.如果你用过iBooks的话,可 能你还对书架布局有一定印象,一个虚拟书架上放着你下载和购买的 ...

  5. [SVN] svn在linux下的使用(svn命令行)ubuntu 删除 新增 添加 提交 状态查询 恢复

    转载自:http://www.cnblogs.com/xulb597/archive/2012/07/18/2597311.html 合并步骤:(1)先切换到分支:(2)svn merge trunk ...

  6. 不区分大小写的Flask-SQLAlchemy查询

    全部转换为小写字符再进行比较 from sqlalchemy import func user = models.User.query.filter(func.lower(User.username) ...

  7. sqlmap批量扫描burpsuite拦截的日志记录

    1.功能上,sqlmap具备对burpsuite拦截的request日志进行批量扫描的能力 python sqlmap.py -l hermes.log --batch -v 3 --batch:会自 ...

  8. Oracle架构全图

  9. solr6.6 索引 word文档

    本文是solr6.6 导入 pdf/doc/txt/json/csv/xml文件 的继续,上篇在索引文件,唯独07格式的word文档不能正常抽取数据,进过研究测试终于,记录下属过程. 其它步骤基本和s ...

  10. 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-报错0X4655,18005错误怎么办

    首先确认驱动器没有报错(如果驱动器报错,请先解决绝对值编码器的清除多圈数据问题) 报错一般上使能就会报错,没法测试运转,而且不管是用贝福自带的NC功能还是自己写的都会一样的效果   请删除在贝福的Et ...