2020年牛客算法入门课练习赛3 B
题意:给你一个区间[L,R]和长度为n一个数组,考虑这个区间里有多少个数能被8整除,并且无法被这个数组中任何一个数字整除。
分析:由于要考虑不能被一个数组中的任何一个元素进行整除,并且数组中的数字比较大。个人感觉写数位dp是没有前途的。由于数组比较小,所以考虑容斥,在求LCM的时候,一个一个求就好。
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 20;
LL a[N], l, r, n, ans;
int solve(int x){
int ans=x/8;
for(int id=1;id<(1<<n);++id){
LL num=8;
int cnt=0;
for(int i=0;i<n;++i){
if(id>>i&1){
++cnt;
num=num*a[i]/__gcd(num,a[i]);
}
if(num>x)break;
}
if(num>x)continue;
if(cnt&1){
ans-=x/num;
}else{
ans+=x/num;
}
}
return ans;
}
int main(){
scanf("%d",&n);
for(int i=0;i<n;++i)scanf("%d",a+i);
scanf("%d%d",&l,&r);
printf("%d",solve(r)-solve(l-1));
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~