给出正整数 n 和 m,统计满足以下条件的正整数对 (a,b) 的数量:
1. 1≤a≤n,1≤b≤m;
2. a×b 是 2016 的倍数。
标签:
32 63
2016 2016
1000000000 1000000000
1
30576
7523146895502644
/* 真心菜,就水出来一个题...... 任何一个数都能表示成n=a*2016+i,m=b*2016+j; n*m=a*b*2016^2+a*2016*j+b*2016*i+i*j; 如果i*j是2016的倍数的话,那么n*m一定是2016的倍数, 这样在2016*2016的规模中遍历出符合i*j%2016=0的数,按照n中有多少个这样的i,m中有多少这样的j,然后相乘,累加起来就得到的区间中所有的数 */ #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #define MAXN 2016 using namespace std; int main() { //freopen("in.txt","r",stdin); //freopen("out.txt","w",stdout); long long cur=0; long long n,m; while(scanf("%lld%lld",&n,&m)!=EOF) { cur=0; for(int i=1;i<=min((long long )2016,n);i++) { for(int j=1;j<=min((long long )2016,m);j++) { if((i*j)%2016==0) { //cout<<i<<" "<<j<<endl; cur+=((n-i)/2016+1)*((m-j)/2016+1); } } } printf("%lld\n",cur); } return 0; } /* _ooOoo_ o8888888o 88" . "88 (| -_- |) O\ = /O ____/`---‘\____ .‘ \\| |// `. / \\||| : |||// / _||||| -:- |||||- | | \\\ - /// | | | \_| ‘‘\---/‘‘ | | \ .-\__ `-` ___/-. / ___`. .‘ /--.--\ `. . __ ."" ‘< `.___\_<|>_/___.‘ >‘"". | | : `- \`.;`\ _ /`;.`/ - ` : | | \ \ `-. \_ __\ /__ _/ .-` / / ======`-.____`-.___\_____/___.-`____.-‘====== `=---=‘ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ I have a dream!A AC deram!! orz orz orz orz orz orz orz orz orz orz orz orz orz orz orz orz orz orz orz orz orz orz orz orz orz orz orz orz orz orz orz orz orz */
标签:
原文地址:http://www.cnblogs.com/wuwangchuxin0924/p/5838984.html