Lucas的数论

reference

题目在这里> <

Pre

数论分块

默认向下取整时.

形如\(\sum\limits_{i=1}^n f\left( \frac{n}{i}\right)\)的求和,由于\(\frac{n}{r}\)的值只有\(\sqrt{n}\)个,可以直接数论分块上.

题解

记原式为\(S(n)\),有

\[S(n)=\sum_{i\rightarrow n}\sum_{j\rightarrow n}[\gcd{i,j}=1]\frac{n}{i}\frac{n}{j}
\]

\[=\sum_k\mu (k)\sum_{i\rightarrow\frac{n}{k}}\sum_{d\rightarrow\frac{n}{k}}\frac{n}{ik}\frac{n}{dk}
\]

\[F(n)=\sum_{i\rightarrow n}d(i)
\]

\[S(n)=\sum_k\mu(k)F\left(\frac{n}{k}\right) ^2
\]

那么

\[F(n)=\sum_{j=1}^n\lfloor \frac{n}{j}\rfloor
\]

可以直接上数论分块.

那么$$S(n)$$也可以数论分块球了> <...

然后\(\mu\)函数的前缀和...就这样:

然后发现也可以数论分块+记忆化搜索搞一搞.

然后就莫名其妙地过了> <

#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <iostream>
#include <ext/rope>
#include <ext/pb_ds/tree_policy.hpp>
#include <ext/pb_ds/priority_queue.hpp>
#define fon(i,n) for(int i=0;i<n;++i)
#define fonx(i,f,n,s) for(int i=f;i<n;i+=s)
#define fonu(i,n) for(int i=1;i<n;i<<=1)
#define fong(i,s,n) for(int i=s;i<=n;++i)
#define debug true
#define pi 3.14159265358979323846264
#define mod 1000000007
typedef long long ll;
typedef unsigned long long ull; struct __sieve{
int primes[1000000],primelen,spf[5000000+1],lm[5000000+1];
bool isk[5000000+1];
int lmer[5000000+1];
void operator()(){
lmer[1]=lm[1]=1;
fong(i,2,5000000){
if(!isk[i]) lm[i]=-1,primes[primelen++]=i;
fon(j,primelen){
int k=i*primes[j];
if(k>5000000) break;
isk[k]=1;
if(i%primes[j]) lm[k]=-lm[i]; else {
lm[k]=0;
break;
}
}
lmer[i]=lmer[i-1]+lm[i];
}
}
inline int operator[](int a){return lmer[a];}
} linear_sieve; struct __hash{
#define hashmod 3001001
inline int hash(int n){
return ((n*405347)&1073741823)%hashmod;
}
int n[hashmod][3],h[hashmod],len;
inline int find(int N){
int p=hash(N);
int q=h[p];
while(p&&n[p][0]!=N) p=n[p][2];
return p?n[p][1]:-1;
}
inline void ins(int N,int p){
++len;
int q=hash(N);
n[len][0]=N,n[len][1]=p,n[len][2]=h[q],h[q]=len;
}
} hashmap;
int N,n; int sumMiu(int a){
if(a<=5000000) return linear_sieve[a];
int res=hashmap.find(a);
if(~res) return res;
int t=1;
for (int l = 1, r = 2,n=a; r <= n; r ++){
r = std::min(n, n / (n / r));
int tmp = n / r;
t-=(r-l+mod)%mod*sumMiu(tmp)%mod;
t=(r<0)?t+mod:t;
l = r;
}
hashmap.ins(a,t);
return t;
} int F(int n){
int ans = 0;
for (int l = 0, r = 1; r <= n; r ++){
r = std::min(n, n / (n / r));
int res = (n / r) % mod;
int tmp = (r - l + mod) % mod * res % mod;
ans += tmp;
if (ans >= mod) ans -= mod;
l = r;
}
return ans;
} int main(){
#ifdef debug
freopen("mathP.in","r",stdin);
freopen("mathP.out","w",stdout);
#endif
scanf("%d",&n);
N=(int)pow((double)n,.5);
linear_sieve();
int ans=0;
for (int l = 0, r = 1; r <= n; r ++){
r = std::min(n, n / (n / r));
int res=F(n/r);
ans+=((ll)sumMiu(r)-sumMiu(l)+mod)%mod*res%mod*res%mod;
if(ans>=mod) ans-=mod;
l = r;
}
printf("%d\n",ans);
return 0;
}

Lucas的数论题解的更多相关文章

  1. bzoj 4176: Lucas的数论 -- 杜教筛,莫比乌斯反演

    4176: Lucas的数论 Time Limit: 30 Sec  Memory Limit: 256 MB Description 去年的Lucas非常喜欢数论题,但是一年以后的Lucas却不那么 ...

  2. 【BZOJ4176】Lucas的数论 莫比乌斯反演

    [BZOJ4176]Lucas的数论 Description 去年的Lucas非常喜欢数论题,但是一年以后的Lucas却不那么喜欢了. 在整理以前的试题时,发现了这样一道题目“求Sigma(f(i)) ...

  3. Lucas的数论(math)

    Lucas的数论(math) 题目描述 去年的今日,Lucas仍然是一个热爱数学的孩子.(现在已经变成业界毒瘤了> <) 在整理以前的试题时,他发现了这么一道题目:求\(\sum\limi ...

  4. BZOJ 4176: Lucas的数论 [杜教筛]

    4176: Lucas的数论 题意:求\(\sum_{i=1}^n \sum_{j=1}^n \sigma_0(ij)\) \(n \le 10^9\) 代入\(\sigma_0(nm)=\sum_{ ...

  5. bzoj 4176 Lucas的数论

    bzoj 4176 Lucas的数论 和约数个数和那题差不多.只不过那个题是多组询问,这题只询问一次,并且 \(n\) 开到了 \(10^9\). \[ \begin{align*} \sum_{i= ...

  6. Mobius反演与积性函数前缀和演学习笔记 BZOJ 4176 Lucas的数论 SDOI 2015 约数个数和

    下文中所有讨论都在数论函数范围内开展. 数论函数指的是定义域为正整数域, 且值域为复数域的函数. 数论意义下的和式处理技巧 因子 \[ \sum_{d | n} a_d = \sum_{d | n} ...

  7. 【bzoj 4176】 Lucas的数论 莫比乌斯反演(杜教筛)

    Description 去年的Lucas非常喜欢数论题,但是一年以后的Lucas却不那么喜欢了. 在整理以前的试题时,发现了这样一道题目“求Sigma(f(i)),其中1<=i<=N”,其 ...

  8. 【bzoj4176】Lucas的数论 莫比乌斯反演+杜教筛

    Description 去年的Lucas非常喜欢数论题,但是一年以后的Lucas却不那么喜欢了. 在整理以前的试题时,发现了这样一道题目"求Sigma(f(i)),其中1<=i< ...

  9. BZOJ4176 Lucas的数论 【莫比乌斯反演 + 杜教筛】

    题目 去年的Lucas非常喜欢数论题,但是一年以后的Lucas却不那么喜欢了. 在整理以前的试题时,发现了这样一道题目"求Sigma(f(i)),其中1<=i<=N", ...

随机推荐

  1. MongoDB 客户端 MongoVue

    直接上图片,图片是按顺序来的 软件下载地址(Windows下的MongoDB客户端MongoVUE 这是最后一个全功能的不收费的版本): http://pan.baidu.com/s/1skYIEq5

  2. 软工实践练习——使用Git进行代码管理

    GITHUB上的预备活动: 注册 创建小组Organization,邀请组员进来 将代码库fork到小组Organization底下 下载并使用GIT: Git的安装 使用Git进行代码管理 1.从百 ...

  3. 获取request的变量

    由于IP代码未实现,先注释掉. package com.helloweenvsfei.servlet; import java.io.IOException; import java.io.Print ...

  4. OC基础--OC中类的声明与定义

    OC中设计一个类的步骤: 一.声明类: 1.用到的关键字--@interface 和 @end 2.类名 3.继承NSObject 4.属性 5.方法(行为,只需要声明) 二.实现(定义)类 1.用到 ...

  5. Weblogic 启动报错:java.lang.NoClassDefFoundError

    Weblogic 启动报错:java.lang.NoClassDefFoundError  ####<2015-6-17 下午03时30分47秒 CST> <Error> &l ...

  6. web开发(二十一)之自定义拦截器的使用

    转自博客:http://blog.csdn.net/pkgk2013/article/details/51985817 拦截器的作用 拦截器,在AOP(Aspect-Oriented Programm ...

  7. IM通信协议逆向分析、Wireshark自定义数据包格式解析插件编程学习

    相关学习资料 http://hi.baidu.com/hucyuansheng/item/bf2bfddefd1ee70ad68ed04d http://en.wikipedia.org/wiki/I ...

  8. POJ2965The Pilots Brothers' refrigerator(枚举+DFS)

    The Pilots Brothers' refrigerator Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 22057 ...

  9. ci 4.2

    超级对象 $this 当前的控制器对象 有很多属性 $this->load    装载器类的实例在systme/core/loader.php  里面有view方法 $obj = new CI_ ...

  10. 取消chrome浏览器下input和textarea的默认样式

    最近一个细节引起了我的注意,chrome浏览器下的input和textarea在聚焦的时候都有一个黄色的边框,而且textarea还可以任意拖动放大,这是不能容忍的,影响美观不说,有时候拖动texta ...