列表

详情


NC52800. 2016

描述

给出正整数 n 和 m,统计满足以下条件的正整数对 (a, b) 的数量:
1. ;
2. 是 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.

上一题