CSU 1803 2016倍数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CSU 1803 2016倍数相关的知识,希望对你有一定的参考价值。
#include <iostream> #include <vector> #include <cstring> #include <queue> #include <cmath> #include <cstdio> using namespace std; typedef long long ll; const int N=3e3+20; const int inf=2e8; //题意:给出n,m<=1e9,问有多少对(a,b) a<=n,b<=m 满足a*b为2016倍数 //a=2016p+r1,b=2016q+r2 -> a*b=2016^2*p*q+2016(pr2+qr1)+r1r2. 则a*b为2016倍数等价于r1r2为2016倍数 //r[i]为n以内余2016为i的数个数,枚举余数即可 ll n,m; ll r1[N],r2[N]; int main() { while(cin>>n>>m) { memset(r1,0,sizeof(r1)); memset(r2,0,sizeof(r2)); ll x=n/2016,y=m/2016;//余数有多少组 ll p1=n%2016,p2=m%2016; for(int i=0;i<2016;i++) r1[i]+=x,r2[i]+=y; for(int i=1;i<=p1;i++) r1[i]++; for(int i=1;i<=p2;i++) r2[i]++; ll ans=0; for(int i=0;i<2016;i++) { for(int j=0;j<2016;j++) { if((i*j)%2016==0) ans+=r1[i]*r2[j]; } } cout<<ans<<endl; } return 0; }
以上是关于CSU 1803 2016倍数的主要内容,如果未能解决你的问题,请参考以下文章
模拟数学CSU 1803 2016 (2016湖南省第十二届大学生计算机程序设计竞赛)
数学CSU 1810 Reverse (2016湖南省第十二届大学生计算机程序设计竞赛)