题解 | #小y的质数#【小y的质数.题解】

小y的质数

https://ac.nowcoder.com/acm/problem/22613

【小y的质数.题解】

看题解代码冗杂,我是没有看懂,所以就按着他的大部分意思在加上自己 YY 的想法给搞出来了。

我们都知道,对于 是恒成立的,不会的同学自行百度吧,基础知识。那么我们最终可以将给出的柿子化简成

我考场上也化简出这个柿子了,直观的讲就是在区间中找出和 互质的数,然后就是最简单的筛!

没错,就是暴力筛,我还以为需要反演或者欧拉之类的东西,因为以前见过一个类似的题目只不过 并不是给定的,所以就因为这我就没有去想筛.....

我们看怎么筛,简单,将 进行质因数分解,暴力的用每个素因子对区间进行筛除。只要和 有相同的质因子都晒去,不过可以发现,有重复。考虑容斥。

本以为这玩意直接上莫比乌斯函数就好,发现素因子是不间断的,所以我们就暴力的枚举质因子的乘积的形式,具体的,用 DFS 暴力的判断这个素因子我选还是不选。然后遵循容斥原理奇加偶减的原则大力容斥就好。

可是我代码中却是偶加奇减,这是因为我们筛的数都是不合法,最终是以 的形式求和,其中 是给定区间长度,那么这就有个负号了,自然而然的所有的加减就取反了。

/*
先写个暴力看柿子的正确性 
看来是正确的的,考虑化简 
只有奇数做贡献,复杂度/2 
*/
#include <iostream>
#include <cstdio>
#include <algorithm>
#define int long long
using namespace std;
const int B=1e7+10;
const int mod=1e9+7;
int read() {int x;scanf("%lld",&x);return x;}
int n,m,k;
int pre[B],vis[B];
int cnt;
void get(int x)
{
    for (int i=2;i*i<=x;i++)
    {
        if (x%i==0) 
        {
            pre[++cnt]=i;
            while (x%i==0) x/=i;
        }
    }
    if (x>1ll) pre[++cnt]=x;
}
int len;
int ans;
void dfs(int now)
{
    if (now==cnt)
    {
        int res=1ll,tot=0;
        for (int i=1;i<=cnt;i++) 
            if (vis[i]) res=res*pre[i],tot++;
        if (res==1 || tot==0) return;
        int num=0;
        num=m/res-(n-1)/res;
        if (tot&1) ans=(ans-num);
        else ans=(ans+num);
        return;
    }
    vis[now+1]=1;
    dfs(now+1);
    vis[now+1]=0;
    dfs(now+1);
}
signed main()
{
    n=read(),m=read(),k=read();
    int res=k; 
    k=2ll*k;
    m=m-2ll*res;
    if (n>m) 
    {
        printf("%lld",0);
        return 0;
    }
    if (n==0) n=1;
    get(k);
    len=m-n+1ll; 
    ans=len;
    dfs(0);
    printf("%lld",ans);
} 
/*
5 10 1
*/
全部评论
%%%%%%
点赞 回复 分享
发布于 2021-09-18 22:13
%%%%%%%%%%%
点赞 回复 分享
发布于 2021-09-18 15:29

相关推荐

昨天 10:10
已编辑
门头沟学院 人工智能
写这篇之前我犹豫了挺久。一方面是怕被人骂,&quot;又一个收割焦虑的转行帖&quot;;另一方面是看了太多用&nbsp;GPT&nbsp;套娃出来的「学习路线」文章,AI&nbsp;味重得让人没法读完。所以这篇全是亲身踩过的坑,时间线、用过的项目、当时的心路全都尽量原样写出来。如果你是大学生在迷茫要不要转&nbsp;AI,或者已经在转的路上,希望能给点参考。&nbsp;一个反共识的开场:你以为进&nbsp;OpenAI&nbsp;的人都是博士?&nbsp;先讲个故事,跟我没关系,但跟所有想转&nbsp;AI&nbsp;的人都有关系。&nbsp;OpenAI&nbsp;的&nbsp;Sora&nbsp;团队(就是搞文生视频那个)一共&nbsp;13&nbsp;个人。这里面有两个人特别有意思:&nbsp;Will&nbsp;DePue,密歇根大学计算机系,直接辍学了。17...
_hengheng:我也本,也算是做ai相关,我最开始感觉做ai工程师有多么多么困难,后来发现懂了原理后整体训练完全可以看成一个流程化的内容,开源方案太多了,大多基本都是按着模子在自家业务上做各种操作,就算是大厂的小部门也没那么多资源去训基模,反而更多的是像怎么把技术往业务方向靠近了,不过当前时代如果本科学历没那么好加上自己执行力不是特别强还真不建议走ai工程师这条路,可以试试其他ai的偏业务方向,不然校招不太好杀出来
点赞 评论 收藏
分享
机智的豹子有点心碎:UU我还在找工作还没找到,一直在搜简历怎么改,总结了这些: 1.SEO:简历根据每一个岗位定制化:使用这个岗位中所描述的工作的词,它要求什么技能就把自己的技能描述成什么样子,把SEO用在自己身上(把我的简历和个人特质,当成一个热门产品来做 “搜索引擎优化”),让HR能用最低的门槛看到我 2."顺序:把岗位要求的技能跟经历放在简历的最开头、最显眼的位置" 3.包装:简历是一个最终交付说明书,只要最终学习成长做得到就可以,在合适的范围内自我吹捧(我这个人怎么能够在HR的角度被迅速的看懂和看到,减轻HR的工作压力) 4.每点加小标题​:用6~10字概括该段内容,便于面试官快速抓取信息。 5.避免空泛描述​:拒绝“培养了组织能力”等泛泛而谈,替换为具体行动和成果。 6."使用“三段式结构”​​:每段经历按“为什么做-做了什么-结果如何”展开: ​a) 为什么做​:痛点或目标(例如“品牌声量不足”) ​b) 做​了什么:方法论(例如“趋势洞察+竞品对标+人群细分”) ​c) 结果如何​:量化成果或影响(例如“推动客户投放20万预算”)" 7.量化成果​:用数字体现工作成效(如“整理500+份资料”“撰写2万字报告”)。 这些有的是我想去的岗的,如果对你有用的话按需修改就好~加油,早日上岸!
点赞 评论 收藏
分享
牛客48784610...:深圳的变成录用进行中,这个是稳了吗,还没有收到邮件
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务