饿了吗笔试20250314算法题第三题,简单梳理一下自己的解法

思路:首先最外层是动态规划,cnt[k]=cnt[k-1]+m;

这里cnt[k]是k计算result,tmp是(i+k)/gcd(i,k)累加,其中i属于[1,k-1];

然后说一下怎么求tmp,tmp对于k为质数和合数有不同的求法。

如果k是质数,m的结果是(k)*(k-1)*3/2;

而如果k不是质数,先假设它是质数,然后减去一个数dif。

说一下怎么求dif,对于所有比根号k小且被k整除的质数j,有k/j=c;则合数是由质数的j*(1+2+...c-1)*(c*j)/1变成了j(1+2+...c-1)*(c*j)/j,也就是(1+2+...c-1)*(c*j),相比质数少了(j-1)(1+2+...c-1)*(c*j);所以dif就是所有比根号k小且被k整除的质数j,k/j=c,对(j-1)(1+2+...c-1)*(c*j)的累加;然后对于任意正整数n,输出cnt[n]即可;时间复杂度是nlog(n);#笔试#

c++代码如下

#include <bits/stdc++.h>


using namespace std;
const int M = 1000000007;
const int N = 1000000;
bool ip[N+10];//判断是否是质数,true表示为合数
int cnt[N+10];//动态规划的dp数组



vector<int> edge[N+10];
void before(){
	//先把N以内的合数找到
	for(int i=2;i<N;i++){
		for(int j=i+i;j<N;j+=i){
			ip[j]=true;
		}
	}
	//p中存储N中所有素数
	vector<int> p;
	for(int i=2;i<N;i++){
		if(!ip[i]) p.push_back(i);
	}
	//初始化dp
	cnt[2]=3;
	
	for(int i=3;i<N;i++){
		long long tmp=0;
		long long dif=0;
		//如果是合数,求它相比于质数需要减的数dif
		if(ip[i]){
			for(int j=0;p[j]*p[j]<=i;j++){
				//找所有比根号i小的质数,可以推导以下的公式
				if(i%p[j]==0){
					dif+=((p[j]-1)*3/2*(i/p[j])*(i/p[j]-1))%M;
				}
			}
		}	
		tmp=(3*(i)*(i-1)/2)%M;
		
		tmp=(tmp-dif+cnt[i-1])%M;
		cnt[i]=tmp;
		
	}
	
}
void solve(){
	for(int i=2;i<100;i++){
		cout<<cnt[i]<<endl;
	}
}
int main() {
    int t=1;
//    cin>>t;
    before();
    //这里我是自己测试的代码,就没有cin输入了,如果有测试样例,可以改一下。
    while(t--){
		solve();
	}
    return 0;
}

全部评论

相关推荐

头像
04-30 16:32
已编辑
河海大学 Java
#腾讯云智研发2025实习生招聘# #腾讯云智# #牛客AI配图神器# 1.自我介绍项目拷打(大多跟我项目强相关,所以没啥参考性)1.为什么要使用RAG技术?2.从输入prompt到使用RAG和调用tool直到返回结果,整个链条的过程?3.我看你项目支持多模态,能上传图片给大模型么?4.你用的本地部署模型还是云上?5.你基于什么原因接触了这方面的内容?6.你了解不了解MCP技术我主动展示了下接口实现~~&nbsp;面试官:嗯,这个项目挺好的网盘项目7.你有线上部署过么?8.你说下什么叫缓存穿透?和缓存雪崩有什么区别?9.断点续传项目怎么实现?怎么判断分片还要不要上传?10.为什么用到redis哨兵机制?11.主从复制数据一致性问题?12.你说的方法都会有一点延迟,如何实现超级绝对一致性??(懵了,没想到有什么能实现绝对一致性的方法,人傻了)我说那你要求绝对一致性一点延迟没有,那就新建一个redis节点专门存哪些需要绝对一致性的数据面试官:&nbsp;哦,那你不就又没法保证这个节点的高可用性了么?😂(😡红温被面试官气笑了)八股:1.设计模式什么时候用单例模式,什么时候用工厂模式2.Java垃圾回收机制闲聊1.你学校在哪里?老家哪里?(面试官听到东北笑了一下😥)2.毕业打算从事哪方面工作? 3.推荐我学习大模型底层原理,最好深入钻一钻,有没有深造的想法(考研)?4.项目都是基于什么情形去做的?5.最快多久到岗?能实习多久?反问:1.总共几面?&nbsp;四到五面,包括笔试现在已经过了两面(是不是暗示我初试过了?)2.实习岗位有没有机会参与到和AI相关的项目?有呀,我们组最近就在做相关的........,只要你有idea,就会给你机会去展现的,公司会支持你的原本订了30分钟,面了45分钟,我说不多问了不打扰您时间了无手撕面试体验:回答间隔很长,一度以为掉线了,不过面试官很友好后续:已oc#牛客在线求职答疑中心#
kk的奇妙冒险:云智实习待遇咋样
查看18道真题和解析 牛客在线求职答疑中心
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务