#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
typedef long long int64;
const int mod=;
#define maxn 2000005
int top,tot,d[maxn],prim[maxn],mu[maxn];
bool vis[maxn];
int64 n,f[maxn],ans;
void prepare(){
tot=top=,memset(vis,,sizeof(vis)),mu[]=,mu[]=,f[]=;
for (int i=;i<maxn;i++){
if (vis[i]==){
prim[++top]=i;
d[i]=i;
mu[i]=-;
f[i]=;
}
for (int j=;j<=top;j++){
if (i*prim[j]>=maxn) break;
vis[i*prim[j]]=;
if (i%prim[j]==){
d[i*prim[j]]=d[i]*prim[j];
mu[i*prim[j]]=;
f[i*prim[j]]=f[i/d[i]]*(f[d[i]]+);
break;
}else{
d[i*prim[j]]=prim[j];
mu[i*prim[j]]=mu[i]*mu[prim[j]];
f[i*prim[j]]=f[i]*f[prim[j]];
}
}
}
for (int i=;i<maxn;i++) mu[i]+=mu[i-];
for (int i=;i<maxn;i++) f[i]=(f[i-]+f[i])%mod;
}
#define maxp 100007
#define maxm 4000005
int now[maxp],prep[maxm];
int64 val[maxm],id[maxm];
void insert(int x,int64 y){
int pos=x%maxp;
prep[++tot]=now[pos],now[pos]=tot,val[tot]=y,id[tot]=x;
}
int64 find(int x){
int pos=x%maxp;
for (int i=now[pos];i;i=prep[i]){
if (id[i]==x) return val[i];
}
return -;
}
int64 Mu(int x){
if (x<maxn) return mu[x];
int64 temp=find(x),t;
if (temp!=-) return temp;
temp=;
for (int j,i=;i<=x;i=j+){
j=x/(x/i); t=Mu(x/i);
temp=((temp-1LL*(j-i+)*t%mod)%mod+mod)%mod;
}
insert(x,temp); return temp;
}
int64 F(int x){
if (x<maxn) return f[x];
int64 temp=;
for (int j,i=;i<=x;i=j+){
j=x/(x/i);
temp=(temp+1LL*(x/i)*(j-i+)%mod)%mod;
}
return temp%mod;
}
int main(){
int64 temp;
prepare();
scanf("%lld",&n);
ans=;
for (int j,i=;i<=n;i=j+){
j=n/(n/i); temp=F(n/i);
ans=(ans+1LL*(Mu(j)-Mu(i-))%mod*temp%mod*temp%mod)%mod;
}
printf("%lld\n",(ans%mod+mod)%mod);
return ;
}

题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=4176

题目大意:

 答案对10^9+7取模。  1<=n<=10^9,单组询问。

吐槽:这是一个对我来说启发很大的题,加深了我对杜教筛的理解。

做法:式子不好写,还是用图好了。

然后用莫比乌斯反演继续化简:

这样就好办了,floor(n/k)最多只有O(sqrt(n))级别的取值,维护mu的前缀和?没错,既然不能预处理,那我们就杜教筛,F数组呢,没错,F[i]=sigam(i/j),1<=j<=i,可以sqrt(n)级别的复杂度做出,如果我们尽可能多的预处理出mu和F,那么可以把总复杂度降至O(n^(2/3)),足以过此题。

数论专项测试——约数个数和(lucas的数论)的更多相关文章

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

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

  2. [BZOI 3994] [SDOI2015]约数个数和(莫比乌斯反演+数论分块)

    [BZOI 3994] [SDOI2015]约数个数和 题面 设d(x)为x的约数个数,给定N.M,求\(\sum _{i=1}^n \sum_{i=1}^m d(i \times j)\) T组询问 ...

  3. hdu 4542 数论 + 约数个数相关 腾讯编程马拉松复赛

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=4542 小明系列故事--未知剩余系 Time Limit: 500/200 MS (Java/Others) ...

  4. UVA - 294 Divisors【数论/区间内约数最多的数的约数个数】

    Mathematicians love all sorts of odd properties of numbers. For instance, they consider to be an int ...

  5. 牛客:t次询问,每次给你一个数n,求在[1,n]内约数个数最多的数的约数个数(数论+贪心)

    https://ac.nowcoder.com/acm/contest/907/B t次询问,每次给你一个数n,求在[1,n]内约数个数最多的数的约数个数 分析: 根据约数和定理:对于一个大于1正整数 ...

  6. 【FZYZOJ】数论课堂 题解(约数个数定理)

    前言:想了两个小时orz,最后才想到要用约数个数定理…… ------------- 题目大意: 给定$n,q,A[1],A[2],A[3]$ 现有$A[i]=(A[i-1]+A[i-2]+A[i-3 ...

  7. Lucas的数论(math)

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

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

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

  9. bzoj 4176 Lucas的数论

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

随机推荐

  1. win7 IIS7.5配置伪静态

    转自:http://www.cnblogs.com/luckly-hf/archive/2013/03/07/2947687.html 第一部: 从如下地址中下载URLRewriter组件组件: 官方 ...

  2. wap页面笔记

    wap页面是自行应页面 必须在head中加入 <meta content="width=device-width, initial-scale=1.0, maximum-scale=1 ...

  3. jboss EAP 6.2+ 通过代码控制JNDI数据源

    通过Jboss提供的API,可以操控JBoss,效果跟在管理控制台手动操作完全一样,下面是示例代码: 一.pom.xml添加依赖项 <dependency> <groupId> ...

  4. weblogic.nodemanager.common.ConfigException: Native version is enabled but nodemanager native library could not be loaded 解决办法

    近日在一个原本工作正常的weblogic web server(操作系统为redhat 64位系统)上折腾安装redis/hadoop等东东,yum install了一堆第3方类库后,重启weblog ...

  5. Beta版本项目展示要求

    项目评审的定在1月5日上午9:00在新主楼D225进行. 在Beta阶段项目评审会上, 每个团队有12分钟展示时间,10分钟问答和机动时间,我们的展示也不需要PPT,大家把要展现的东西写成博客(可以有 ...

  6. SQL Server Management Studio无法记住密码

    用sa账户登录sql server 2008,勾选了“记住密码”,但重新登录时,SQL Server Management Studio无法记住密码.   后来发现,在重新登录时,登录名显示的并非是s ...

  7. js基础知识温习:构造函数与原型

    构造函数 构造函数主要用于初始化新对象.按照惯例,构造函数名第一个字母都要大写. 构造函数有别于其它函数在于它使用new操作符来调用生成一个实例对象.换句话说,如果一个函数使用new操作符来调用,则将 ...

  8. [AJAX系列]onreadystatechange事件

    onreadystatechange事件: 当请求被发送到服务器时,我们需要执行一些基于响应的任务 每当readyState改变时,就会触发onreadystatechange事件 readyStat ...

  9. 20 seq 某个数到另外一个数之间的所有整数

    seq命令Shell内建命令 seq命令用于产生从某个数到另外一个数之间的所有整数. 语法 : seq [选项]... 尾数 seq [选项]... 首数 尾数 seq [选项]... 首数 增量 尾 ...

  10. 作业4-两人编程<词频统计>

     协作:苗中峰,刘鑫成       我主要攻克排序,成哥写了文件流的使用.整合工作由我完成,成哥帮我查阅资料,避免和解决语法错误.              这次任务较作业三的变化是:       * ...