51nod1222最小公倍数计数
http://210.33.19.103/contest/1113/problem/2
同学的神仙做法:
首先考虑先去掉X<=Y的限制,也就是先计算满足要求的任意有序pair(X,Y)的数量,再用一些简单操作(略去)得到目标答案
化简式子可以得到$\sum_{d}\mu(d)\sum_a\sum_b\sum_c[abc<={\lfloor}\frac{n}{d^2}{\rfloor}]$
可以强行给a,b,c规定一个顺序。设a是最小的,则a只需要枚举到$(\frac{n}{d^2})^{1/3}$就行
剩下有很多做法了,略去了
%:pragma GCC optimize()
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<vector>
#include<cmath>
using namespace std;
#define fi first
#define se second
#define mp make_pair
#define pb push_back
typedef long long ll;
typedef unsigned long long ull;
int mu[];
int prime[],len;
bool nprime[];
/*
ll calc0(ll n)
{
ll d,i,j,k,tan1,tan2,tan3,t1;
for(d=1;;++d)
{
if(d*d>n) break;
t1=n/(d*d);
tan1=tan2=tan3=0;
for(i=1;i<=100;++i)
for(j=1;j<=100;++j)
for(k=1;k<=100;++k)
if(i*j*k<=t1)
if(i==j&&j==k)
++tan3;
else if(i==j||j==k||i==k)
++tan2;
else ++tan1;
printf("at%lld %lld %lld\n",tan1,tan2,tan3);
}
return 233;
}
*/
ll calc(ll n)
{
ll d,t1,t2,endj,i,j,j1,tan1,tan2,tan3,ans=,endi;
for(d=;;++d)
if(mu[d])
{
if(d*d>n) break;
t1=n/(d*d);
tan1=tan2=tan3=;
for(i=;;++i)
{
if(i*i*i>t1) break;
t2=t1/i;
endj=ll(sqrt(t2+0.5));
for(j=i+;j<=endj;j=j1+)
{
j1=min(endj,t2/(t2/j));
tan1+=(t2/j)*(j1-j+);
}
if(i+<=endj)
tan1-=(endj+i+)*(endj-i)/;
}
tan1*=;
endi=ll(sqrt(t1+0.5));
for(i=;i<=endi;++i)
tan2+=t1/(i*i);
for(i=;;++i)
{
if(i*i*i>t1) break;
++tan3;
}
tan2=(tan2-tan3)*;
ans+=mu[d]*(tan1+tan2+tan3);
//printf("1t%lld %lld %lld %lld\n",d,tan1,tan2,tan3);
}
return ans;
}
int main()
{
ll i,j,t;
mu[]=;
for(i=;i<=;i++)
{
if(!nprime[i]) prime[++len]=i,mu[i]=-;
for(j=;j<=len&&(t=i*prime[j])<=;j++)
{
nprime[t]=;
if(i%prime[j]==) {mu[t]=;break;}
else mu[t]=-mu[i];
}
}
ll a,b;
scanf("%lld%lld",&a,&b);
printf("%lld\n",(calc(b)-calc(a-)+b-a+)/);
//calc0(b);calc0(a-1);
return ;
}
51nod1222最小公倍数计数的更多相关文章
- 51nod1222 最小公倍数计数
题目来源: Project Euler 基准时间限制:6 秒 空间限制:131072 KB 分值: 640 定义F(n)表示最小公倍数为n的二元组的数量. 即:如果存在两个数(二元组)X,Y(X & ...
- 51Nod1222 最小公倍数计数 数论 Min_25 筛
原文链接https://www.cnblogs.com/zhouzhendong/p/51Nod1222.html 题意 给定 $a,b$, 求 $$\sum_{n=a}^b \sum_{i=1}^n ...
- 51nod1222 最小公倍数计数 莫比乌斯反演 数学
求$\sum_{i = 1}^{n} \sum_{j = 1}^{i} [lcm(i, j) \le n]$因为这样不好求,我们改成求$\sum_{i = 1}^{n} \sum_{j = 1}^{n ...
- [51nod1222] 最小公倍数计数(莫比乌斯反演)
题面 传送门 题解 我此生可能注定要和反演过不去了--死都看不出来为啥它会突然繁衍反演起来啊-- 设\(f(n)=\sum_{i=1}^n\sum_{j=1}^n[{ij\over\gcd(i,j)} ...
- 【51nod】1222 最小公倍数计数 莫比乌斯反演+组合计数
[题意]给定a和b,求满足a<=lcm(x,y)<=b && x<y的数对(x,y)个数.a,b<=10^11. [算法]莫比乌斯反演+组合计数 [题解]★具体 ...
- 51NOD 1222 最小公倍数计数 [莫比乌斯反演 杜教筛]
1222 最小公倍数计数 题意:求有多少数对\((a,b):a<b\)满足\(lcm(a,b) \in [1, n]\) \(n \le 10^{11}\) 卡内存! 枚举\(gcd, \fra ...
- [51Nod 1222] - 最小公倍数计数 (..怎么说 枚举题?)
题面 求∑k=ab∑i=1k∑j=1i[lcm(i,j)==k]\large\sum_{k=a}^b\sum_{i=1}^k\sum_{j=1}^i[lcm(i,j)==k]k=a∑bi=1∑kj ...
- 【51Nod 1222】最小公倍数计数
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1222 求\([a,b]\)中的个数转化为求\([1,b]\)中的个数减去 ...
- 51nod 1222 最小公倍数计数【莫比乌斯反演】
参考:https://www.cnblogs.com/SilverNebula/p/7045199.html 所是反演其实反演作用不大,又是一道做起来感觉诡异的题 转成前缀和相减的形式 \[ \sum ...
随机推荐
- 同程联盟景点门票动态程序 beta1.0源码
经过一段时间的开发,以及内部测试,同程网联盟景区新版程序正式发布推出,感谢广大联盟会员一直以来的支持与关注! 同程网联盟景区新版程序新功能介绍: 1.统一的页面风格.页面风格将与随后推出的度假线路.酒 ...
- web性能压力测试工具http_load/webbench/ad
http_load 下载地址:http://www.acme.com/software/http_load/http_load-12mar2006.tar.gz 程序非常小,解压后也不到100K 居家 ...
- ACM学习历程——POJ1260 Pearls(动态规划)
Description In Pearlania everybody is fond of pearls. One company, called The Royal Pearl, produces ...
- Oracle表空间维护总结
1. 概念:表空间:最大的逻辑存储文件,与物理上的一个或多个数据文件对应,每个数据库至少拥有一个表空间,表空间的大小等于构成表空间的所有数据文件的大小总和,用于存储用户在数据库中存储的所有内容. 2. ...
- BZOJ3165:[HEOI2013]Segment
浅谈标记永久化:https://www.cnblogs.com/AKMer/p/10137227.html 题目传送门:https://www.lydsy.com/JudgeOnline/proble ...
- win32 UNICODE 支持
#include <string> #ifdef _UNICODE #define tstring std::wstring #define __T(quote) L##quote #el ...
- POJ3694(求割边)
Network Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 7943 Accepted: 2893 Descripti ...
- HDU4391(线段树+剪枝)
Paint The Wall Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- java反射机制(转)
一.什么是反射机制 简单的来说,反射机制指的是程序在运行时能够获取自身的信息.在java中,只要给定类的名字, 那么就可以通过反射机制来获得类的所有信息. 二.哪里用到反射机制 ...
- [xdoj1233]Glory and LCS
题意:求两个排列的最长公共子序列n<=1e5 解题关键:转化为LIS. 最长公共子序列 的 nlogn 的算法本质是 将该问题转化成 最长增序列(LIS),因为 LIS 可以用nlogn实现,所 ...