bzoj3944Sum
3944: Sum
Time Limit: 10 Sec Memory Limit: 128 MB
Submit: 5149 Solved: 1385
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
1
2
8
13
30
2333
Sample Output
2 0
22 -2
58 -3
278 -3
1655470 2
杜教筛入门?
http://blog.csdn.net/popoqqq/article/details/45023331
#include<bits/stdc++.h>
#define rint register int
#define ll long long
#define N 2000001
using namespace std;
int pri[N>>],vis[N],cnt,cas,n;
ll phi[N],mo[N],p[N],q[N];
void predeal(){
mo[]=phi[]=;
for(rint i=;i<N;++i){
if(!vis[i]){phi[i]=i-;mo[i]=-;pri[++cnt]=i;}
for(rint j=;j<=cnt&&pri[j]*i<N;++j){
vis[i*pri[j]]=;
if(i%pri[j]){phi[i*pri[j]]=phi[i]*(pri[j]-);mo[i*pri[j]]=-mo[i];}
else{phi[i*pri[j]]=phi[i]*pri[j];mo[i*pri[j]]=;break;}
}
}
for(rint i=;i<N;++i)phi[i]+=phi[i-],mo[i]+=mo[i-];
}
ll getp(int x){return x<N?phi[x]:p[n/x];}
ll getq(int x){return x<N?mo[x]:q[n/x];}
void solve(int x){
if(x<N)return;int i,j=,t=n/x;
if(vis[t])return;vis[t]=;
p[t]=(1ll*x+)*x/;q[t]=;
while(j<x){
i=j+;j=x/(x/i);solve(x/i);
p[t]-=getp(x/i)*(j-i+);
q[t]-=getq(x/i)*(j-i+);
}
}
int main(){
scanf("%d",&cas);predeal();
while(cas--){
scanf("%d",&n);memset(vis,,sizeof(vis));
if(n<N)printf("%lld %lld\n",phi[n],mo[n]);
else{solve(n);printf("%lld %lld\n",p[],q[]);}
}
return ;
}
bzoj3944Sum的更多相关文章
- [模板] 杜教筛 && bzoj3944-Sum
杜教筛 浅谈一类积性函数的前缀和 - skywalkert's space - CSDN博客 杜教筛可以在\(O(n^{\frac 23})\)的时间复杂度内利用卷积求出一些积性函数的前缀和. 算法 ...
随机推荐
- 15-TypeScript策略模式
在前面的简单工厂模式中,通常将每个类.接口定义到不同的文件中.在面向对象开发思想中有一个重要的原则就是封装变化点,在实际操作过程中, 通常被调用方的代码不要去更改,而是增加,这是面向对象的开闭原则.在 ...
- java希尔排序
java希尔排序 1.基本思想: 希尔排序也成为"缩小增量排序",其基本原理是,现将待排序的数组元素分成多个子序列,使得每个子序列的元素个数相对较少,然后对各个子序列分别进行直接插 ...
- Python内置函数(29)——slice
英文文档: class slice(stop) class slice(start, stop[, step]) Return a slice object representing the set ...
- ios开发常识(1)开发语言和参考资料
学iphone开发用的语言是object-c,object-c和c++,java还是有很大区别,如果你坚持学习iphone开发的话可以不学c++,java,直接学习这个语言,先入为主,可能觉得这个语言 ...
- Mysql 5.1的坑
1.数据库表是区分大小写的 之前程序在5.7数据库没问题,测试环境上数据库是5.1的,就提示表找不到. 2.同样的sql,在5.1上会提示事务获取锁失败,超时返回.而5.7上正常.原因暂未找到.
- Java-Maven(八):IDEA使用本地maven,并配置远程中央仓库
声明:已经安装了maven,安装请参考:<Java-Maven(一):Maven的简介与安装> 1)一般我们从github.码云(https://gitee.com)上获取代码后,实际上我 ...
- Struts(二十三):使用声名式验证
Struts2工程中的验证分为两种: 1.基于XWork Validation Framework的声明式验证:Struts2提供了一些基于XWork Validation Framework的内建验 ...
- jqurey datatables属性
$('selector').dataTable( { /* * 默认为true * 是否自动计算列宽,计算列宽会花费一些时间,如果列宽通过aoColumns传递,可以关闭该属性作为优化 */ &quo ...
- 【MySQL】通过Binary Log简单实现数据回滚(一)
一.前言 对,没错,我又水了好一阵子,深刻反思寄几.前段时间,工作项目上出于对excel等批量操作可能出现误操作的问题,要求提供一个能够根据操作批次进行数据回滚的能力.在开发的过程中接触到了MySQL ...
- 拥抱开源,Office 365开发迎来新时代
前言 作为全球最大的开放源代码托管平台,Github在上周迎来了它的十岁生日.自从2008年正式上线以来,Github上面汇聚了数以千万计的开发人员和各种项目,它几乎成为了开源的代名词和风向标,各大软 ...