P10415 [蓝桥杯 2023 国 A] 切割
题目背景
数据提供:https://www.luogu.com.cn/discuss/838792
题目描述
给定一个 W × H W\times H W×H 的长方形,两边长度均为整数。小蓝想把它切割为很多个边长为整数的小正方形。假设切割没有任何损耗,正方形的边长至少为 2 2 2,不允许出现余料,要求所有正方形的大小相等,请问最多能切割出多少个?
输入格式
输入一行,包含两个整数 W , H W, H W,H,用一个空格分隔。
输出格式
输出一行包含一个整数表示答案。如果不存在满足要求的方案,输出 0 0 0。
输入输出样例 #1
输入 #1
10 20
输出 #1
50
输入输出样例 #2
输入 #2
6 9
输出 #2
6
输入输出样例 #3
输入 #3
8 13
输出 #3
0
说明/提示
【样例解释 1】
切割成 5 × 10 = 50 5\times 10=50 5×10=50 个边长为 2 2 2 的正方形。
【评测用例规模与约定】
对于
30
%
30\%
30% 的评测用例,
1
≤
W
,
H
≤
1000
1\le W,H\le 1000
1≤W,H≤1000;
对于
60
%
60\%
60% 的评测用例,
1
≤
W
,
H
≤
1
0
6
1\le W,H\le 10^6
1≤W,H≤106;
对于所有评测用例,
1
≤
W
,
H
≤
1
0
9
1\le W,H\le 10^9
1≤W,H≤109。
C++实现
#include<bits/stdc++.h>
#define int long long
using namespace std;
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
int n,m;signed main(){
IOS;cin>>n>>m;
int gcd=__gcd(n,m);
if(gcd<2){cout<<0;return 0;}
for(int i=2;ii<=gcd;i++){
if(gcd%i==0){cout<<n/im/i;return 0;}
}cout<<n/gcd*m/gcd;return 0;//求个数
}
后续
接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容