首页 > 其他分享 >洛谷P6583 回首过去

洛谷P6583 回首过去

时间:2023-09-26 22:55:35浏览次数:34  
标签:ch frac 分块 leq p5 回首 P6583 洛谷 有限小数

涉及知识点:容斥原理、数论分块

前言

本题对于数论分块类型题目推式子和处理方法有很大的启发

题面

Link

给定正整数 \(n\),求有序实数对 \((x,y)\) 满足 \(1\leq x,y \leq n\) 并且使得 \(\frac{x}{y}\) 为有限小数(本题题意下整数可视作小数点后有 \(0\) 位的有限小数)。

分析

首先我们要明确一点性质,那就是 \(\frac{x}{y}\) 是有限小数当且仅当该分数化为最简分数后,分母分解质因数的结果没有除了 \(2\) 和 \(5\) 以外的其他数

既然分数 \(\frac{x}{y}\) 是否为有限小数只和化简后的分母有关,那么我们可以尝试从 \(1\) 到 \(n\) 枚举分母 \(y\),情况有两种如下:

  • \(y\) 分解质因数之后不存在 \(2\) 和 \(5\) 除外的数

    这种情况下,\(x\) 可以为任何值,都可以保证该分数为有限小数,因此满足该分数为有限小数的分子 \(x\) 取值有 \(n\) 种。

  • \(y\) 分解质因数存在 \(2\) 和 \(5\) 除外的数

    我们令 \(y=ab\),其中 \(a\) 分解质因数只包含 \(2\) 和 \(5\),\(b\) 分解质因数只包含除了 \(2\) 和 \(5\) 的其他数,易得 \(b\ne 1\)。此时如果要使得该分数为有限小数,说明该分数化为最简后分母只剩下 \(a\),说明化简前的分子一定能被 \(b\) 整除才能使得分子分母能同时消去 \(b\)。可以发现满足 \(b\mid x \and 1\leq x\leq n\) 的 \(x\) 共有 \(\lfloor \frac{n}{b} \rfloor\) 种。

以上两种情况总结一下,得到 \(\Large ans=\sum\limits_{i=1}^n\lfloor\frac{n}{\frac{i}{2^p5^q}}\rfloor\),其中 \(p\) 与 \(q\) 是极大的,情况一时 \(p\) 与 \(q\) 均为 \(0\)。


有了以上这几点分析,你就可以获得 80 分的好成绩了,那么接下来该如何继续优化呢?

首先我们可以发现答案是一堆分数向下取整的和,从这一点就可以观察出这是一个类似数论分块的地方,但是与数论分块常见的形式 \(\Large\sum\limits_{i=1}^{n}\lfloor\frac{n}{i}\rfloor\) 不同的是,本题分数的分子不是 \(i\) 而是 \(\Large\frac{n}{\frac{i}{2^p5^q}}\)。我们令 \(\large t=\frac{i}{2^p5^q}\),另外由于 \(i\leq n\),所以易得 \(\large t\leq \frac{n}{2^p5^q}\),另外 \(t\) 不含质因子 \(2\) 和 \(5\),由此原式化为 \(\Large ans=\sum\limits_{p=0}^{log_2 n}\sum\limits_{q=0}^{log_5 n}\sum\limits_{t=1}^{\frac{n}{2^p5^q}}\large\lfloor\frac{n}{t}\rfloor\times[2\nmid t]\times[5\nmid t]\),我们只需要 \(O(\sqrt n)\) 的时间复杂度内对 \(\Large\sum\limits_{t=1}^{\frac{n}{2^p5^q}}\lfloor\frac{n}{t}\rfloor\) 进行数论分块(由于 \(t\) 不含质因子 \(2\) 和 \(5\),数论分块时需要容斥,具体见代码),统计每块的前缀和,再 \(O(\log^2 n)\) 枚举 \(p\) 与 \(q\),每次查找时 \(O(\log n)\) 二分找到最后一个完整的块,再用数论分块同样的方法 \(O(1)\) 求出剩下多出来的一段的贡献,总复杂度为 \(O(\sqrt n + \log^3 n)\)

代码

#include<bits/stdc++.h>
using namespace std;
template<class T>inline void rd(T &x){
    T res=0,f=1;
    char ch=getchar();
    while(!isdigit(ch)){if(ch=='-')f=-1; ch=getchar();}
    while(isdigit(ch)){res=res*10+ch-'0';ch=getchar();}
    x=res*f;
}
template<class T>inline void wt(T x,char endch='\0'){
    static char wtbuff[20];
    static int wtptr;
    if(x==0){
        putchar('0');
    }
    else{
        if(x<0){x=-x;putchar('-');}
        wtptr=0;
        while(x){wtbuff[wtptr++]=x%10+'0';x/=10;}
        while(wtptr--) putchar(wtbuff[wtptr]);
    }
    if(endch!='\0') putchar(endch);
}
typedef long long LL;
const LL MAXN=1e12+5,MAXT=2000005;
LL n,ans=0,posr[MAXT],sum[MAXT],cnt=0;
inline LL len(LL l,LL r){//容斥去除掉能被2或5整除的t
    return (r-l+1) - (r/2-(l-1)/2) - (r/5-(l-1)/5) + (r/10-(l-1)/10);
}
int main(){
    rd(n);
    ans=0,cnt=0;
    for(LL l=1,r;l<=n;l=r+1){
        r=n/(n/l);
        posr[++cnt]=r;
        sum[cnt]=sum[cnt-1]+len(l,r)*(n/l);
    }
    LL cnt2=log(n)/log(2),sum2=1;
    for(LL i=0;i<=cnt2;i++,sum2*=2){
        LL cnt5=log(n/sum2)/log(5),sum5=1;//计算log_5(cnt5)用了换底公式
        for(LL j=0;j<=cnt5;j++,sum5*=5){
            LL cur=n/sum2/sum5;
            LL id=lower_bound(posr+1,posr+1+cnt,cur)-posr-1;
            ans+=sum[id]+len(posr[id]+1,cur)*(n/cur);
        }
    }
    wt(ans,'\n');
    return 0;
}

标签:ch,frac,分块,leq,p5,回首,P6583,洛谷,有限小数
From: https://www.cnblogs.com/SkyNet-PKN/p/17731480.html

相关文章

  • 洛谷P3612 [USACO17JAN] Secret Cow Code S
    [USACO17JAN]SecretCowCodeS题面翻译奶牛正在试验秘密代码,并设计了一种方法来创建一个无限长的字符串作为其代码的一部分使用。给定一个字符串,让后面的字符旋转一次(每一次正确的旋转,最后一个字符都会成为新的第一个字符)。也就是说,给定一个初始字符串,之后的每一步都会增加当......
  • 洛谷P2341 [USACO03FALL] 受欢迎的牛 G
    P2341受欢迎的牛G题解这题我们需要了解强连通分量一、定义在有向图\(G\)中,如果两个顶点\(u\),\(v\)间有一条从\(u\)到\(v\)的有向路径,同时还有一条从\(v\)到\(u\)的有向路径,则称两个顶点强连通。如果有向图\(G\)的每两个顶点都强连通,称\(G\)是一个强连通......
  • 洛谷3830
    对这题的第一问,我们可以感性地理解一下设f[i]表示i个叶子的平均叶子深度是多少那么增加一个叶子(即一次拓展操作)所有叶子的总深度增加了2,平均深度增加了\(\frac{2}{i}\)所以\(f[i]=f[i-1]+\frac{2}{i}\)然后就可以利用样例进行验证了如果不放心我们就老老实实地推式子给一些......
  • 洛谷P1058 [NOIP2008 普及组] 立体图
    写在前面题解更新较少,请勿嗔怪。本文粗鄙而简陋,要获得更好的阅读体验,请移步https://www.luogu.com.cn/problem/solution/P1058。NOIp普及组2008的第四题,题目网站https://www.luogu.com.cn/problem/P1058。关于题目[NOIP2008普及组]立体图题目描述小渊是个聪明的孩子,他经......
  • P5836 [USACO19DEC] Milk Visits S - 洛谷题解
     题目链接:[P5836] USACO19DEC] MilkVisitsS-洛谷|计算机科学教育新生态(luogu.com.cn)这道题可以用并查集来解决。题目中每个结点只有两个状态:H和G。那么我们可以推断出,只有当起点和终点间每个结点的状态相同但是起点(或者终点或起点到终点之间的某一点)与所需状态不同......
  • 洛谷P5104 红包发红包
    我们假设他是离散的设[0,w]这个区间有i个数那么第一个人期望获得的钱数\(E(1)=\frac{1}{i}\sum_{j=1}^{i}\frac{w}{i}j=\frac{w(1+i)}{2i}\)因为这个区间实际上有无数个数,故令i趋于无穷,有\(E(1)=\frac{w}{2}\)那么轮到第二个人的时候还剩下\(w-\frac{w}{2}=\frac{w}{2}\)这么......
  • 洛谷 P4391. [BOI2009] Radio Transmission 无线传输
    [BOI2009]RadioTransmission无线传输题目描述给你一个字符串$s_1$,它是由某个字符串$s_2$不断自我连接形成的(保证至少重复$2$次)。但是字符串$s_2$是不确定的,现在只想知道它的最短长度是多少。输入格式第一行一个整数$L$,表示给出字符串的长度。第二行给出字符串$s_......
  • 洛谷 P3719. [AHOI2017初中组] rexp
    [AHOI2017初中组]rexp题目背景为了解决形形色色的字符串匹配问题,正则表达式是一个强有力的工具。正则表达式通过定义一套符号体系,能够表示出需要查找的字符串所具有的性质。如a|aa能匹配a或aa,(a|b)c能匹配ac或bc。题目描述完整的正则表达式过于复杂,在这里我们只考虑......
  • 洛谷 P1469. 找筷子
    找筷子题目描述经过一段时间的紧张筹备,电脑小组的“RP餐厅”终于开业了,这天,经理LXC接到了一个定餐大单,可把大家乐坏了!员工们齐心协力按要求准备好了套餐正准备派送时,突然碰到一个棘手的问题:筷子!CX小朋友找出了餐厅中所有的筷子,但遗憾的是这些筷子长短不一,而我们都知道筷子......
  • 洛谷 P1143. 进制转换
    进制转换题目描述请你编一程序实现两种不同进制之间的数据转换。输入格式共三行,第一行是一个正整数,表示需要转换的数的进制$n\(2\len\le16)$,第二行是一个$n$进制数,若$n>10$则用大写字母$\verb!A!\sim\verb!F!$表示数码$10\sim15$,并且该$n$进制数对应的十进制的......