[BZOJ2154]Crash的数字表格(数论)
来源:互联网 发布:mac限免软件 编辑:程序博客网 时间:2024/05/16 16:15
=== ===
这里放传送门
=== ===
题解
题目要求
就直接画柿子就好啦。。
1.由于最小公倍数等于两数乘积除以最大公因数,柿子变为:
2.枚举两数最大公因数d,显然两个数分别除以它们的最大公因数得到的数应该是互质的:
3.经典的画柿子方法:令
4.后半段柿子中出现了互质数对之积的和。为了让柿子看起来好看一点就把它拿出来单独算吧。
记为
5.后半段又出现了一个范围内所有数对之积的和,表示为
6.求出
代码
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int Mod=20101009;int n,m,mu[10000010],prm[10000010],sqr[10000010];bool ext[10000010];long long sum,ans,h,t1,t2,l,w1,w2,hd,tl;long long Sum(int n,int m){ long long a1,a2; a1=(long long)n*(n+1)/2%Mod; a2=(long long)m*(m+1)/2%Mod; return a2*a1%Mod; //注意取模}long long s(int n,int m){ sum=0; hd=1; while (hd<=n){ w1=n/(n/hd);w2=m/(m/hd); tl=min(w1,w2); sum+=(long long)(sqr[tl]-sqr[hd-1])%Mod*Sum(n/hd,m/hd)%Mod; //注意强转 hd=tl+1;sum%=Mod; //注意取模 } return sum%Mod;}int main(){ scanf("%d%d",&n,&m); if (n>m) swap(n,m); mu[1]=1;sqr[1]=1; for (int i=2;i<=n;i++){ if (ext[i]==false){ prm[++prm[0]]=i; mu[i]=-1; } for (int j=1;j<=prm[0];j++){ if (i*prm[j]>n) break; ext[i*prm[j]]=true; if (i%prm[j]==0){ mu[i*prm[j]]=0;break; }else mu[i*prm[j]]=-mu[i]; } sqr[i]=(long long)i*i*mu[i]%Mod; sqr[i]=(sqr[i]+sqr[i-1])%Mod; //注意取模 } ans=0;h=1; while (h<=n){ t1=n/(n/h);t2=m/(m/h); l=min(t1,t2); ans+=(long long)(h+l)*(l-h+1)/2%Mod*s(n/h,m/h)%Mod;//注意强转 h=l+1;ans%=Mod;//注意取模 } printf("%lld\n",(ans%Mod+Mod)%Mod); return 0;}
偏偏在最后出现的补充说明
这题如果全都开成long long会炸内存。。所以要各种强转还要各种取模。。在计算sum函数的时候特别容易炸掉int需要注意。
0 0
- [BZOJ2154]Crash的数字表格(数论)
- 【BZOJ2154】Crash的数字表格
- bzoj2154: Crash的数字表格
- BZOJ2154: Crash的数字表格
- bzoj2154: Crash的数字表格
- [bzoj2154]Crash的数字表格
- bzoj2154 Crash的数字表格
- bzoj2154 Crash的数字表格
- [BZOJ2154] Crash的数字表格
- bzoj2154 Crash的数字表格
- bzoj2154 Crash的数字表格
- bzoj2154: Crash的数字表格
- bzoj2154: Crash的数字表格
- [bzoj2154]Crash的数字表格
- BZOJ2154: Crash的数字表格
- bzoj2154 Crash的数字表格
- [bzoj2154]Crash的数字表格
- 【bzoj2154】Crash的数字表格
- Java中Map的遍历方法
- 重要实用的sql语句
- 数据库事务总结 基本特征 并发问题 隔离级别(几个文章的综合,下面有链接)
- JavaScript之定时器详解
- NYOJ 1058 部分和问题
- [BZOJ2154]Crash的数字表格(数论)
- 二进制减法
- 我的Hibernate学习之旅(4)~多对一单向关联映射
- 文章迁移
- 什么样的结构算是一个闭包
- leetcode (8) - String to Integer
- C++学习日记10——类简介
- 为什么选择使用Go语言
- [BZOJ3398][Usaco2009 Feb]Bullcow 牡牛和牝牛(dp)