2016
来源:互联网 发布:nginx pathinfo 404 编辑:程序博客网 时间:2024/06/10 03:57
给出正整数 n 和 m,统计满足以下条件的正整数对 (a,b) 的数量:
1. 1≤a≤n,1≤b≤m;
2. a×b 是 2016 的倍数。
输入包含不超过 30 组数据。
每组数据包含两个整数 n,m (1≤n,m≤10 9).
32 632016 20161000000000 1000000000
1305767523146895502644
解题思路:可以求出在
[1,N] 中,模为[0,2016] 的数的个数; 以及在[1,M] 中,模为[0,2016] 的数的个数。复杂度O(2016)
因为x∗y%2016=x%2016∗y%2016 ,那么,接下来就只需要统计求和就OK了。要求两个数的乘积是2016的倍数,那么只需他们对2016的模是2016的倍数即可。所以1 和 2017 在这个问题中其实是相同的,而全部化成对2016的模,方便计数。
可以用两层循环进行求解,因为所给时间很充足。
#include <iostream>#include <cstdio>#include <map>#include <set>#include <vector>#include <queue>#include <stack>#include <cmath>#include <algorithm>#include <cstring>#include <string>using namespace std;#define INF 0x3f3f3f3ftypedef long long LL;LL a[2016],b[2016];int main(){ LL n,m,sum; while(cin>>n>>m) { sum=0; for(int i=0; i<2016; i++) { a[i]=n/2016; b[i]=m/2016; } for(int i=1; i<=n%2016; i++) { a[i]++; } for(int i=1; i<=m%2016; i++) { b[i]++; } for(int i=0; i<2016; i++) { for(int j=0; j<2016; j++) { if((i*j)%2016==0) { sum+=a[i]*b[j]; } } } cout<<sum<<endl; } return 0;}
0 0
- 2016
- 2016
- 2016
- 2016!
- 2016
- 2016
- 2016
- 2016
- 2016
- 2016
- 2016
- 2016
- 2016
- 2016-
- 2016
- 2016
- 2016
- 2016
- spring boot(2)-@SpringBootApplication详解
- sql触发器
- this和super关键字
- h5双飞翼布局
- 斐波那契数列的通项公式
- 2016
- Prometheus 实战于源码分析之discovery
- FastDFS(一):环境搭建
- 威尔逊定理
- JS保存文件到本地
- PTA 5-3 逆序的三位数 (10分)
- 什么是ESD?
- ADODB.Recordset错误800a0cb3"的解决方
- 斯坦福机器学习笔记二