http://acm.tzc.edu.cn/acmhome/vProblemList.do?method=problemdetail&oj=SPOJ&pid=DIVCNT2

给出n求

其中是除数函数,0代表0次方.

 #include<algorithm>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<iostream>
#define ll long long
ll n,sig[],N,a[];
int p[];
bool mark[];
char mul[];
int smu[],L;
int read(){
int t=,f=;char ch=getchar();
while (ch<''||ch>''){if (ch=='-') f=-;ch=getchar();}
while (''<=ch&&ch<=''){t=t*+ch-'';ch=getchar();}
return t*f;
}
ll Read(){
ll t=,f=;char ch=getchar();
while (ch<''||ch>''){if (ch=='-') f=-;ch=getchar();}
while (''<=ch&&ch<=''){t=t*+ch-'';ch=getchar();}
return t*f;
}
void Init(int n){
sig[]=;smu[]=;mul[]=;
for (int i=;i<=n;i++){
if (!mark[i]){
p[++p[]]=i;
mul[i]=-;
smu[i]=;
sig[i]=;
}
for (int j=;j<=p[]&&p[j]*i<=n;j++){
mark[p[j]*i]=;
if (i%p[j]==){
sig[p[j]*i]=sig[i]/(smu[i]+)*(smu[i]+);
smu[p[j]*i]=smu[i]+;
mul[p[j]*i]=;
break;
}
sig[p[j]*i]=sig[i]*;
smu[p[j]*i]=;
mul[p[j]*i]=-mul[i];
}
}
for (int i=;i<=n;i++) sig[i]+=sig[i-],smu[i]=smu[i-]+std::abs((int)mul[i]);
} ll R(ll x){
if (x<=L) return sig[x];
ll res=;
for (register ll i=,j;i<=x;i=j+){
j=(x/(x/i));
res+=(j-i+)*(x/i);
}
return res;
}
ll Smu(ll x){
if (x<=L) return smu[x];
ll res=;
for (register ll i=;i*i<=x;i++)
if (mul[i]) res+=mul[i]*(x/(i*i));
return res;
}
void solve(ll n){
int m=sqrt(n);
ll ans=;
ll pre=smu[m],tt;
for (int i=;i<=m;i++) if (mul[i]) ans+=R(n/i);
for (ll i=m+,j;i<=n;i=j+){
j=(n/(n/i));
tt=Smu(j);
ans+=(tt-pre)*(R(n/i));
pre=tt;
}
printf("%lld\n",ans);
}
int main(){
int T=read();
ll mx=;
N=;
for (int i=;i<=T;i++)
a[i]=Read(),mx=std::max(mx,a[i]);
if (mx<=) L=;else L=pow(N,2.0/3.0);
Init(L);
for (int i=;i<=T;i++){
solve(a[i]);
}
}

SPOJDIVCNT2: Counting Divisors(莫比乌斯反演)的更多相关文章

  1. 【Project Euler】530 GCD of Divisors 莫比乌斯反演

    [题目]GCD of Divisors [题意]给定f(n)=Σd|n gcd(d,n/d)的前缀和F(n),n=10^15. [算法]莫比乌斯反演 [题解]参考:任之洲数论函数.pdf 这个范围显然 ...

  2. [SPOJ] DIVCNT2 - Counting Divisors (square) (平方的约数个数前缀和 容斥 卡常)

    题目 vjudge URL:Counting Divisors (square) Let σ0(n)\sigma_0(n)σ0​(n) be the number of positive diviso ...

  3. hdu1695 GCD(莫比乌斯反演)

    题意:求(1,b)区间和(1,d)区间里面gcd(x, y) = k的数的对数(1<=x<=b , 1<= y <= d). 知识点: 莫比乌斯反演/*12*/ 线性筛求莫比乌 ...

  4. BZOJ 2154: Crash的数字表格 [莫比乌斯反演]

    2154: Crash的数字表格 Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 2924  Solved: 1091[Submit][Status][ ...

  5. BZOJ2301: [HAOI2011]Problem b[莫比乌斯反演 容斥原理]【学习笔记】

    2301: [HAOI2011]Problem b Time Limit: 50 Sec  Memory Limit: 256 MBSubmit: 4032  Solved: 1817[Submit] ...

  6. Bzoj2154 Crash的数字表格 乘法逆元+莫比乌斯反演(TLE)

    题意:求sigma{lcm(i,j)},1<=i<=n,1<=j<=m 不妨令n<=m 首先把lcm(i,j)转成i*j/gcd(i,j) 正解不会...总之最后化出来的 ...

  7. 莫比乌斯函数筛法 & 莫比乌斯反演

    模板: int p[MAXN],pcnt=0,mu[MAXN]; bool notp[MAXN]; void shai(int n){ mu[1]=1; for(int i=2;i<=n;++i ...

  8. 【BZOJ-2440】完全平方数 容斥原理 + 线性筛莫比乌斯反演函数 + 二分判定

    2440: [中山市选2011]完全平方数 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2371  Solved: 1143[Submit][Sta ...

  9. POI2007_zap 莫比乌斯反演

    题意:http://hzwer.com/4205.html 同hdu1695 #include <iostream> #include <cstring> #include & ...

随机推荐

  1. LeetCode_Pascal's Triangle II

    Given an index k, return the kth row of the Pascal's triangle. For example, given k = 3, Return [1,3 ...

  2. 【转】ARM Linux 3.x的设备树(Device Tree)

    原文网址:http://blog.csdn.net/21cnbao/article/details/8457546 1.    ARM Device Tree起源 Linus Torvalds在201 ...

  3. bzoj1750 [Usaco2005 qua]Apple Catching

    Description It is a little known fact that cows love apples. Farmer John has two apple trees (which ...

  4. UITableView系列(1)---Apple缓存池机制

    一.概述 关于UITableView的基本使用, 其实十分简单.但是做App最重要的之一就是细致,技术方面要做到细致, 必须深入了解底层, 才能做出优化让程序跑得更快.那么这一系列文章从我实际项目中获 ...

  5. c语言所有的errno枚举值含义

    可以通过以下代码,获取所有的错误码信息: #include <string.h> /* for strerror */ #include <errno.h> #include ...

  6. yum笔记

    rpm --> yum HTML: HyperText Mark LanguageXML: eXtended Mark Language XML, JSON: 半结构化的数据 yum仓库中的元数 ...

  7. 【转】多核CPU运行模式

    多核CPU运行模式主要有以下三种: •非对称多处理(Asymmetric multiprocessing,AMP)——每个CPU内核运行一个独立的操作系统或同一操作系统的独立实例(instantiat ...

  8. ubuntu14.04 安装 StudioZend12

    到官网下载:http://www.zend.com/en/products/studio/downloadsLinux-64位:http://downloads.zend.com/studio-ecl ...

  9. UIScreen类

    CGRect screenBounds = [ [UIScreen mainScreen]bounds];//返回的是带有状态栏的Rect NSLog(@"%@", NSStrin ...

  10. C基础知识小总结(十)

                  "如有不正确之处,请指出,谢谢"    --Mood   <指针和函数> 指针函数   函数指针 <最基本的使用函数指针>   ...