【BZOJ4176】Lucas的数论 莫比乌斯反演
【BZOJ4176】Lucas的数论
Description
去年的Lucas非常喜欢数论题,但是一年以后的Lucas却不那么喜欢了。

Input
第一行一个整数n。
Output
一行一个整数ans,表示答案模1000000007的值。
Sample Input
Sample Output
HINT
对于100%的数据n <= 10^9。
题解:前置技能:
然后直接上莫比乌斯反演

用杜教筛处理μ(d),然后喜闻乐见的分块~
#include <cstdio>
#include <cstring>
#include <iostream>
#include <map>
#define mod 1000000007
using namespace std;
const int m=10000000;
typedef long long ll;
int n,num;
ll ans;
int mu[m+10],sm[m+10],pri[m+10];
bool np[m+10];
map<ll,ll> mp;
ll getsm(ll x)
{
if(x<=m) return sm[x];
if(mp[x]) return mp[x];
ll ret=1,i,last;
for(i=2;i<=x;i=last+1)
{
last=x/(x/i);
ret=(ret-(last-i+1)*getsm(x/i)%mod+mod)%mod;
}
mp[x]=ret;
return ret;
}
ll getf(ll x)
{
ll ret=0,i,last;
for(i=1;i<=x;i=last+1)
{
last=x/(x/i);
ret=(ret-(last-i+1)*(x/i)%mod+mod)%mod;
}
return ret*ret%mod;
}
int main()
{
scanf("%d",&n);
ll i,j,last;
sm[1]=mu[1]=1;
for(i=2;i<=m;i++)
{
if(!np[i]) pri[++num]=i,mu[i]=-1;
sm[i]=sm[i-1]+mu[i];
for(j=1;j<=num&&i*pri[j]<=m;j++)
{
np[i*pri[j]]=1;
if(i%pri[j]==0)
{
mu[i*pri[j]]=0;
break;
}
mu[i*pri[j]]=-mu[i];
}
}
for(i=1;i<=n;i=last+1)
{
last=n/(n/i);
ans=(ans+(getsm(last)-getsm(i-1)+mod)%mod*getf(n/i)%mod)%mod;
}
printf("%lld",ans);
return 0;
}
【BZOJ4176】Lucas的数论 莫比乌斯反演的更多相关文章
- 【bzoj4176】Lucas的数论 莫比乌斯反演+杜教筛
Description 去年的Lucas非常喜欢数论题,但是一年以后的Lucas却不那么喜欢了. 在整理以前的试题时,发现了这样一道题目"求Sigma(f(i)),其中1<=i< ...
- 【bzoj 4176】 Lucas的数论 莫比乌斯反演(杜教筛)
Description 去年的Lucas非常喜欢数论题,但是一年以后的Lucas却不那么喜欢了. 在整理以前的试题时,发现了这样一道题目“求Sigma(f(i)),其中1<=i<=N”,其 ...
- BZOJ 4176 Lucas的数论 莫比乌斯反演+杜教筛
题意概述:求,n<=10^9,其中d(n)表示n的约数个数. 分析: 首先想要快速计算上面的柿子就要先把d(ij)表示出来,有个神奇的结论: 证明:当且仅当a,b没有相同的质因数的时候我们统计其 ...
- 51Nod1675 序列变换 数论 莫比乌斯反演
原文http://www.cnblogs.com/zhouzhendong/p/8665675.html 题目传送门 - 51Nod1675 题意 给定序列$a,b$,让你求满足$\gcd(x,y)= ...
- UOJ#62. 【UR #5】怎样跑得更快 数论 莫比乌斯反演
原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ62.html 题解 太久没更博客了,该拯救我的博客了. $$\sum_{1\leq j \leq n} \ ...
- 【bzoj3601】一个人的数论 莫比乌斯反演+高斯消元
题目描述 题解 莫比乌斯反演+高斯消元 (前方高能:所有题目中给出的幂次d,公式里为了防止混淆,均使用了k代替) #include <cstdio> #include <cstrin ...
- [SPOJ VLATTICE]Visible Lattice Points 数论 莫比乌斯反演
7001. Visible Lattice Points Problem code: VLATTICE Consider a N*N*N lattice. One corner is at (0,0, ...
- BZOJ4176 Lucas的数论 【莫比乌斯反演 + 杜教筛】
题目 去年的Lucas非常喜欢数论题,但是一年以后的Lucas却不那么喜欢了. 在整理以前的试题时,发现了这样一道题目"求Sigma(f(i)),其中1<=i<=N", ...
- BZOJ4176: Lucas的数论
Description 去年的Lucas非常喜欢数论题,但是一年以后的Lucas却不那么喜欢了. 在整理以前的试题时,发现了这样一道题目“求Sigma(f(i)),其中1<=i<=N”,其 ...
随机推荐
- leetcode 二分查找 Search in Rotated Sorted Array
Search in Rotated Sorted Array Total Accepted: 28132 Total Submissions: 98526My Submissions Suppose ...
- hdu 5105 Math Problem(数学)
pid=5105" target="_blank" style="">题目链接:hdu 5105 Math Problem 题目大意:给定a.b ...
- Oracle 存储过程调用返回游标的另一个存储过程。
一个扩展存储过程调用另一个存储过程,示例: 被调用存储过程:最后会返回一个游标,游标返回一个值.调用这个存储过程的存储过程同样需要获取它. procedure SearchBill --根据到货单号查 ...
- sqlmap 定义别名冲突
2012-04-11 ibatis exception “Alias name conflict occurred. The alias 'weibobo' is already mapped ...
- cadence原理图和PCB互联显示成功但是不能高亮和database
问题现象:cadence原理图和PCB互联显示成功但是不能高亮我的问题 解决:尝试修复数据库试试,Tools->Database check 提醒:有一个封装非法命名,在原理图中修改后 再次保存 ...
- McCabe环路复杂度计算方法
环路复杂度用来定量度量程序的逻辑复杂度.以McCabe方法来表示. 在程序控制流程图中,节点是程序中代码的最小单元,边代表节点间的程序流.一个有e条边和n个节点的流程图F,可以用下述3种方法中的任何一 ...
- Redis之Set命令
0.前言 redis对无序集合的操作几个命令,本文介绍几个命令实际操作过程. 1.sadd命令 2.求差集和求并集命令 3.求交集命令 1.sadd命令 void saddCommand(redisC ...
- Centos RSA 登录
创建密钥 ssh-keygen -t rsa 1.用户目录下新建.ssh/authorized_keys mkdir .ssh #创建隐藏目录 #修改文件访问权限 chmod 700 .ssh cd ...
- fstream之seekp/seekg/ios::ate/ios::app
在程序开发中,IO处理无处不在,经常会在代码中遇到特殊的IO处理需求 1.描述 需求:如果文件不存在则创建,存在则打开,然后先读取文件的末行,然后在文件末尾写入. 代码: #include <i ...
- iOS 如何缩小打包项目ipa大小
之前项目上线完全由技术老大搞,这次独立开发自己来,觉得自己的打包项目体积略大,网上搜索了一些比较不错的方法,这里总结下 1.配置编译选项 (Levels选项内)Genetate Debug Symbo ...