HZOJ 太阳神
所以我刚学反演还没学反演就要做这么一道神仙题……
首先大于n不好求,补集转化。
$ans=n*n-\sum \limits _{i=1}^{n} \sum \limits _{j=1}^{n} \left [ lcm(i,j)\leqslant n\right ] $
那么我们要求:
$\sum \limits _{i=1}^{n} \sum \limits _{j=1}^{n} \left [ \frac{i*j}{gcd(i,j) } \leqslant n \right ]$
枚举d=gcd(i,j),
原式=$\sum \limits _{d=1}^{n} \sum \limits _{i=1}^{n} \sum \limits _{j=1}^{n} \left [ i*j*d\leqslant n ,gcd(i,j)=1 \right ]$
=$\sum \limits _{d=1}^{n} \sum \limits _{i=1}^{\left \lfloor \frac{n}{d} \right \rfloor} \sum \limits _{j=1}^{\left \lfloor \frac{n}{d*i} \right \rfloor} \left [ gcd(i,j)=1 \right ]$
根据莫比乌斯函数的性质:$\sum \limits _{d\mid n}u(d) =\left [ n=1 \right ]$
于是原式=$\sum \limits _{d=1}^{n} \sum \limits _{i=1}^{n} \sum \limits _{j=1}^{n} \sum \limits _{g\mid gcd(i,j)} u(g)$
所以就要反演了?其实就是交换求和的顺序。
个人这步稍难理解(因为我没学过反演),将g提前后相当于求u(g)出现的次数,那么修改g的定义,令${i}'=\frac{i}{g},{j}'=\frac{j}{g}$.
原式=$\sum \limits _{d=1}^{n} \sum \limits _{g=1} u(g) \sum \limits _{{i}'=1}^{\left \lfloor \frac{n}{d*g} \right \rfloor} \sum \limits _{{j}'=1}^{\left \lfloor \frac{n}{d*i*g} \right \rfloor} 1$
将g提前,原式=$\sum \limits _{g=1}^{\sqrt{n}}u(g) \sum \limits _{{i}'=1} \sum \limits _{{j}'=1} \sum \limits _{d=1} \left [ {i}'*{j}'*d\leqslant \frac{n}{g*g} \right ]$
到此式子就推完了,可是看起来还是不是很可做……但是可以发现g是根号n范围内的,u线筛即可,同时枚举g。
不妨设${i}'\leqslant {j}'\leq d$,那么设$m=\frac{n}{g*g}$可以以$O\left ( m^{\frac{1}{3}} \right )$的复杂度枚举i,以$\sqrt{\frac{m}{i}}$的复杂度枚举j,O1算出d的个数,之后乘$A_3^3$。
但是要考虑算重的情况,手动讨论一下就行了。
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#define int LL
#define LL long long
using namespace std;
const int mod=1e9+;
LL n;
bool isprime[];
int prime[],cnt,mu[];
void shai(int n)
{
mu[]=;
for(int i=;i<=n;i++)isprime[i]=;
for(int i=;i<=n;i++)
{
if(isprime[i])mu[i]=-,prime[++cnt]=i;
for(int j=;j<=cnt&&prime[j]*i<=n;j++)
{
isprime[prime[j]*i]=;
if(i%prime[j]==)break;
else mu[i*prime[j]]=-mu[i];
}
}
}
signed main()
{
cin>>n;int maxn=sqrt(n);shai(maxn+);
LL ans=;
for(int i=;i<=maxn;i++)
{
LL res=;
int m=n/(i*i);
for(int a=;a*a*a<=m;a++)
{
int maxb=sqrt((1.0*m)/a);
for(int b=a;b<=maxb;b++)
if(m/(a*b)>=b)
{
if(a==b)res=(res+(m/(a*b)-b)*+)%mod;
else res=(res+(m/(a*b)-b)*+)%mod;
}
}
ans=(ans+mu[i]*res%mod)%mod;
}
printf("%lld\n",(n%mod*(n%mod)%mod-ans%mod+mod)%mod);
}
HZOJ 太阳神的更多相关文章
- vs2008编译QT开源项目--太阳神三国杀源码分析(三) 皮肤
太阳神三国杀的界面很绚丽,界面上按钮的图标,鼠标移入移出时图标的变化,日志和聊天Widget的边框和半透明等效果,既可以通过代码来控制,也可以使用皮肤文件qss进行控制.下面我们分析一下三国杀的qss ...
- [CSP-S模拟测试]:太阳神(莫比乌斯反演)
题目描述 太阳神拉很喜欢最小公倍数,有一天他想到了一个关于最小公倍数的题目.求满足如下条件的数对$(a,b)$对数:$a,b$均为正整数且$a,b\leqslant n$而$lcm(a,b)>n ...
- csp-s模拟测试57(10.2)「天空龙」·「巨神兵」·「太阳神」
题目是古埃及神话??? A. 天空龙 傻逼模拟,看来没有滑天下之大稽QAQ,也没有打错快读(大雾...) B. 巨神兵 难度爆增,一脸懵比..... 60分状压: 因为是求有向图,关于有向图好像拓扑用 ...
- Eclipse 各版本版本号代号对应一览表
版本号 代号 日期 Eclipse 3.1 IO [木卫一,伊奥] 2005 Eclipse 3.2 Callisto [木卫四,卡里斯托] 2006 Eclipse 3.3 Eruopa ...
- eclipse version
查看Eclipse的版本号: 1. 找到eclipse安装目录 2. 进入readme文件夹,打开readme_eclipse.html 3. readme_eclipse.html呈现的第二行即数字 ...
- Eclipse几个版本号的区别
查看Eclipse的版本号: 1. 找到eclipse安装目录 2. 进入readme文件夹,打开readme_eclipse.html 3. readme_eclipse.html呈现的第二行即数字 ...
- 迷你MVVM框架 avalonjs1.5 入门教程
avalon经过几年以后,已成为国内一个举足轻重的框架.它提供了多种不同的版本,满足不同人群的需要.比如avalon.js支持IE6等老旧浏览器,让许多靠政府项目或对兼容性要求够高的公司也能享受MVV ...
- ASP.NET5 Beta8可用性
ASP.NET5 beta8现已上都的NuGet作为一个工具升级到Visual Studio2015!此版本极大地扩展.NET核心对OS X和Linux所支持的范围.您现在可以使用网络,加密和全球化特 ...
- 炉石传说 C# 开发笔记 (源代码整理公开)
源代码已经整理过了,去除了不需要的项目. 注意:以前文章中出现过的Git已经变更过了,请以前关注过,Fork过的朋友,重新Fork一下. GitHub地址 卡牌XML文件的做成:(Git上面是没有XM ...
随机推荐
- 字符串匹配算法之kmp算法
kmp算法是一种效率非常高的字符串匹配算法,是由Knuth,Morris,Pratt共同提出的模式匹配算法,所以简称KMP算法 算法思想 在一个字符串中查找另一个字符串时,会遇到如下图的情况 我们通常 ...
- 一个网页登陆界面写30多个测试Case——测试之道
转自博文:http://www.cnblogs.com/I-am-Betty/p/3566411.html 具体需求: 有一个登陆页面, (假如上面有2个textbox, 一个提交按钮. 请针对这个页 ...
- 在Ubuntu Server 14.04上源码安装Odoo 9.0
1. 更新Ubuntu服务器软件源 sudo apt-get update #更新软件源 sudo apt-get dist-upgrade #更新软件包,自动查找依赖关系 sudo shutdown ...
- [Array]122. Best Time to Buy and Sell Stock II(obscure)
Say you have an array for which the ith element is the price of a given stock on day i. Design an al ...
- AT2164 Rabbit Exercise
传送门 解题思路 首先考虑k=1的情况,对于每一个a[i],它可能会到a[i-1]*2-a[i] 与 a[i+1]*2-a[i]两个位置,概率都为%50,那么它的期望位置为 (a[i-1]*2-a[i ...
- $\mathcal{Miemeng}$的病态码风计划
晚上困的要命,先写个码风计划提提神. 计划目标 抵制无理压行. 抵制不可读代码. 倡导代码艺术化,分层化 具体的一些细节和展示 1>整体 首先要把预读部分(我这么叫的),命名域使用,全局变量定义 ...
- Hackerrank--Ashton and String(后缀数组)
题目链接 Ashton appeared for a job interview and is asked the following question. Arrange all the distin ...
- 在Vmware安装虚拟机WindowsServer 2003
一.创建并安装虚拟机 新建Windows2003server系统 按照下面操作即可 https://www.cnblogs.com/color-blue/p/8525710.html 二.安装虚拟机 ...
- java学习补全 1
CLASSPATH java执行命令时利用此路径加在需要的.class文件 字符串常量就是String 类的匿名对象 String类在直接复制的情况下只会保留一块堆内存 a="hhh&quo ...
- Python 文件读写小结