NC52800. 2016
描述
输入描述
输入包含不超过 30 组数据。
每组数据包含两个整数 n, m ().
输出描述
对于每组数据,输出一个整数表示满足条件的数量。
示例1
输入:
32 63
输出:
1
示例2
输入:
2016 2016
输出:
30576
示例3
输入:
1000000000 1000000000
输出:
7523146895502644
C++14(g++5.4) 解法, 执行用时: 13ms, 内存消耗: 512K, 提交时间: 2019-10-07 16:59:41
#include <bits/stdc++.h> #define ll long long using namespace std; int main(){ ll n,m; while(cin >> n >> m){ ll ans = 0; for(int i = 1;i <= 2016&&i <= n;i++) for(int j = 1;j <= 2016 && j <= m;j++) if(i*j%2016 == 0) ans+=((n-i)/2016+1)*(1+(m-j)/2016); cout << ans << endl; } return 0; }
C++11(clang++ 3.9) 解法, 执行用时: 15ms, 内存消耗: 404K, 提交时间: 2019-11-02 08:27:41
#include <bits/stdc++.h> using namespace std; int main(){ int n,m; cin>>n>>m; long long ans=0; for(int i=1;i<=min(n,2016);i++){ for(int j=1;j<=min(m,2016);j++){ if(i*j%2016==0) ans+=(long long)((n-i)/2016+1)*((m-j)/2016+1); } } cout<<ans<<endl; }
Pascal(fpc 3.0.2) 解法, 执行用时: 71ms, 内存消耗: 352K, 提交时间: 2019-10-07 12:46:31
var n,m,i,j,z:int64; begin read(n,m); while not eof do begin z:=0; for i:=1 to 2016 do for j:=1 to 2016 do if ((i*j)mod 2016=0)and(m>=i)and(n>=j) then z:=z+((m-i)div 2016+1)*((n-j)div 2016+1); writeln(z); read(n,m); end; end.