51nod 1056
n<=10000000000
然后欧拉函数的前缀和可以用莫比乌斯函数的前缀和快速求,注意各种取模
#include<cstdio>
typedef long long i64;
const int N=,P=,M=,I2=(M+)/;
int ps[N/],pp=;
bool isnp[N+];
int ms[N+],phs[N+];
i64 xs[P];
int ys[P];
int f(i64 n){
if(n<=N)return ms[n];
int w=n%P;
while(xs[w]){
if(xs[w]==n)return ys[w];
w+=;
if(w>=P)w-=P;
}
xs[w]=n;
i64 s=;
for(i64 i=,j;i<=n;i=j+){
j=n/(n/i);
s+=(j-i+)*f(n/i);
}
return ys[w]=-s;
}
int sum_phi(i64 n){
if(n<=N)return phs[n];
i64 ans=;
for(i64 i=,j;i<=n;i=j+){
i64 k=n/i;
j=n/k;
k%=M;
ans=(ans+k*k%M*(f(j)-f(i-)))%M;
}
ans=(ans+)*I2%M;
return ans;
}
int main(){
ms[]=phs[]=;
for(int i=;i<=N;i++){
if(!isnp[i])ms[ps[pp++]=i]=-,phs[i]=i-;
for(int j=;j<pp&&i*ps[j]<=N;j++){
isnp[i*ps[j]]=;
if(i%ps[j])ms[i*ps[j]]=-ms[i],phs[i*ps[j]]=phs[i]*(ps[j]-);
else{
phs[i*ps[j]]=phs[i]*ps[j];
break;
}
}
}
for(int i=;i<=N;i++)ms[i]+=ms[i-];
for(int i=;i<=N;i++)(phs[i]+=phs[i-])%=M;
i64 n,ans=;
scanf("%lld",&n);
for(i64 i=,j=,k;i<=n;i=j+){
k=n/i;
j=n/k;
k%=M;
ans=(ans+k*(k+)%M*(sum_phi(j)-sum_phi(i-)))%M;
}
n%=M;
ans=(ans-n*(n+)%M*I2)%M;
printf("%lld",(ans+M)%M);
return ;
}
51nod 1056的更多相关文章
- 【51Nod 1244】莫比乌斯函数之和
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1244 模板题... 杜教筛和基于质因子分解的筛法都写了一下模板. 杜教筛 ...
- 51Nod 1268 和为K的组合
51Nod 1268 和为K的组合 1268 和为K的组合 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 给出N个正整数组成的数组A,求能否从中选出若干个,使 ...
- 51Nod 1428 活动安排问题
51Nod 1428 活动安排问题 Link: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1428 1428 活 ...
- 51Nod 1278 相离的圆
51Nod 1278 相离的圆 Link: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1278 1278 相离的圆 基 ...
- 【51Nod 1501】【算法马拉松 19D】石头剪刀布威力加强版
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1501 dp求出环状不连续的前缀和,剩下东西都可以算出来,比较繁琐. 时间 ...
- 【51Nod 1622】【算法马拉松 19C】集合对
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1622 简单题..直接暴力快速幂 #include<cstdio&g ...
- 【51Nod 1616】【算法马拉松 19B】最小集合
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1616 这道题主要是查询一个数是不是原有集合的一个子集的所有数的gcd. ...
- 【51Nod 1674】【算法马拉松 19A】区间的价值 V2
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1674 对区间分治,统计\([l,r]\)中经过mid的区间的答案. 我的 ...
- 随便玩玩系列之一:SPOJ-RNG+51nod 算法马拉松17F+51nod 1034 骨牌覆盖v3
先说说前面的SPOJ-RNG吧,题意就是给n个数,x1,x2,...,xn 每次可以生成[-x1,x1]范围的浮点数,把n次这种操作生成的数之和加起来,为s,求s在[A,B]内的概率 连续形的概率 假 ...
随机推荐
- js 实现复制到剪切板 复制按钮兼容各大浏览器
zeroclipboard官网:https://github.com/zeroclipboard/ZeroClipboard 下载压缩包,得到两个“ZeroClipboard.js”和“ZeroCli ...
- maker 2008年发表在genome Res
http://gmod.org/wiki/MAKER_Tutorial 简单好用 identify repeats, to align ESTs and proteins to the genome, ...
- UI学习笔记---第十六天XML JSON解析
一.解析的基本概念 从事先规定好的格式中提取数据 解析的前提:提前约定好格式.数据提供方按照格式提供数据,数据方按照格式获取数据 常见解析方式XML解析JSON解析 二.XML:可扩展标记语言 XML ...
- ZOJ 1005 Jugs
原题链接 题目大意:有一大一小两个杯子,相互倒水,直到其中一个杯子里剩下特定体积的水.描述这个过程. 解法:因为两个杯子的容积互质,所以只要用小杯子不断往大杯子倒水,大杯子灌满后就清空,大杯子里迟早会 ...
- 使用Matlab对灰度图像编程实现2D的傅里叶变换
1. 先载入一幅灰度图像,如下: (非灰度图) 2. 利用函数fft2,对其进行快速傅立叶变换, 并利用函数fftshift 将变换后的图像原点移动到频率矩形的中心. 3. 利用abs()函 ...
- SpringMVC4零配置--Web上下文配置【MvcConfig】
与SpringSecurity的配置类似,spring同样为我们提供了一个实现类WebMvcConfigurationSupport和一个注解@EnableWebMvc以帮助我们减少bean的声明. ...
- Codeforces Testing Round #8 B. Sheldon and Ice Pieces 水题
题目链接:http://codeforces.com/problemset/problem/328/B 水题~ #include <cstdio> #include <cstdlib ...
- c 函数及指针学习 7
1.结构的存储分配 1 2 printf("%d \n",sizeof(char)); printf("%d \n",sizeof(int)); int 类型为 ...
- 安卓虚拟机启动后报错: 类似 SDK Manager] Error: Error parsing .....devices.xml 解决方案
昨天用android sdk manager 更新了android sdk, 我是在eclipse上面安装adt来开发android的, 而且我每次打开虚拟机的时候也报错.报错的信息都是一样的. ...
- 如何卸载rpm包
首先通过 rpm -q <关键字> 可以查询到rpm包的名字 然后 调用 rpm -e <包的名字> 删除特定rpm包 如果遇到依赖,无法删除,使用 rpm -e --nod ...