[国家集训队]Banner
Description#
LZN 搞完保送生考试,终于要回到信息组大家庭了,Chanxer 决定要好好地欢迎LZN,于是他在在操场上整齐地插了(M + 1) *(N + 1) 个标杆,形成了一个平面直角坐标系,左下角的标杆的坐标为(0; 0),右上角的标杆的坐标为(M;N),Chanxer 现在想要选择两个标杆作为端点连上横幅“ 机房欢迎你”。
可是,由于Chanxer 很农,他不希望横幅被其它的标杆拦住,因此他要求选择的两个标杆的连线不应该经过其它标杆,并且横幅的长度还应该在[L;R]以内。
现在Chanxer 想要知道他有多少种选法,注意,由于横幅的两面是一模一样的,所以选择的两个点没有起点终点之分,鉴于答案可能很大,而又不允许上交Python、Java 等语言的源代码,你只需要告诉他答案除以B 的余数是多
少就可以了。
Solution#
假设第一个端点选择在(0,0),那么另一个端点的位置(i,j)必须满足gcd(i,j)=1,否则横幅就会穿过别的杆子,所以题中所求为
令f(x,i)=∑xj=1[gcd(i,j)=1](n−j+1)
m∑i=1n∑j=1[l2≤i2+j2≤r2][gcd(i,j)=1](m−i+1)(n−j+1)=m∑i=1min(n,√r2−i2)∑j=max(1,√l2−i2)[gcd(i,j)=1](m−i+1)(n−j+1)=m∑i=1(m−i+1)min(n,√r2−i2)∑j=max(1,√l2−i2)[gcd(i,j)=1](n−j+1)=m∑i=1(m−i+1)(f(min(n,⌊√r2−i2⌋,i)−f(max(1,⌈√l2−i2⌉−1),i)
化简f(x,i)
f(x,i)=∑d|ix∑d|jμ(d)(n−j+1)=∑d|iμ(d)⌊xd⌋∑j=1(n+1−jd)=∑d|iμ(d)((n+1)⌊xd⌋−⌊xd⌋∑j=1jd)=∑d|iμ(d)((n+1)⌊xd⌋−d⌊xd⌋(⌊xd⌋+1)2)
之后胡搞就可以了,这道题线性筛跑得飞快,但是我用了质因数分解的怪方法,差点过不去
细节不多,挺简单的,也就写了4天
#include<iostream> #include<cstdio> #include<cmath> using namespace std; long long m,n,l,r,mod,ans,p[105]; inline long long read() { long long f=1,w=0; char ch=0; while(ch<'0'||ch>'9') { if(ch=='-') f=-1; ch=getchar(); } while(ch>='0'&&ch<='9') { w=(w<<1)+(w<<3)+ch-'0'; ch=getchar(); } return f*w; } long long s(long long x) { return x*(x+1)/2%mod; } long long cal(long long x) { long long ret=0; for(long long i=0;i<=(1<<(p[0]))-1;i++) { long long temp=1,mu=1; for(long long j=0;j<p[0];j++) if(i&(1<<j)) { temp*=p[j+1]; mu*=-1; } if(temp>x) continue; (ret+=mu*(((x/temp)*(n+1)%mod-temp*s(x/temp)%mod+mod)%mod+mod)%mod+mod)%=mod; } return ret; } int main() { m=read(); n=read(); l=read(); r=read(); mod=read(); for(long long i=1;i<=m;i++) { long long temp=i,L=0,R=0; p[0]=0; for(long long j=2;j<=sqrt(i);j++) if(!(temp%j)) { p[++p[0]]=j; while(!(temp%j)) temp/=j; } if(temp!=1) p[++p[0]]=temp; if(l>=i) L=max(1ll,(long long)ceil(sqrt(l*l-i*i))); else L=1; R=min(n,(long long)sqrt(r*r-i*i)); if(L<=R) (ans+=(cal(R)-cal(L-1)+mod)%mod*(m-i+1)%mod*2%mod)%=mod; } if(l<=1) (ans+=n*(m+1)%mod+m*(n+1)%mod)%=mod; printf("%lld\n",ans); return 0; }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
· Linux系统下SQL Server数据库镜像配置全流程详解
· Sdcb Chats 技术博客:数据库 ID 选型的曲折之路 - 从 Guid 到自增 ID,再到
· Winform-耗时操作导致界面渲染滞后
· Phi小模型开发教程:C#使用本地模型Phi视觉模型分析图像,实现图片分类、搜索等功能
· 语音处理 开源项目 EchoSharp
· drools 规则引擎和 solon-flow 哪个好?solon-flow 简明教程