某块矩形墙壁由块瓷砖构成,每块瓷砖都是
的矩形。现在想要从左上角向右下角,从右上角向左下角划两条直线,请问直线与每块瓷砖的边界线产生的交点共有多少个?
某块矩形墙壁由块瓷砖构成,每块瓷砖都是
的矩形。现在想要从左上角向右下角,从右上角向左下角划两条直线,请问直线与每块瓷砖的边界线产生的交点共有多少个?
一行四个正整数,墙壁的长有
块瓷砖,宽有
块瓷砖,瓷砖的长
,宽
。
一个正整数,交点数目。
2 2 1 1
5
产生5个交点如图所示:
2 3 2 1
9
产生9个交点如图所示:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
long a = scanner.nextInt();
long b = scanner.nextInt();
long x = scanner.nextInt();
long y = scanner.nextInt();
long gcdXY = gcd(x, y);
x /= gcdXY;
y /= gcdXY;
long ans = 0;
if (a == b) {
ans = a + b + 2;
if (a % 2 == 0 || b % 2 == 0) ans--;
} else {
ans = (a + 1) * 2 + (b + 1) * 2 - 2 * (gcd(a, b) + 1);
if (a % 2 == 0 || b % 2 == 0) ans--;
}
System.out.println(ans);
}
private static long gcd(long a, long b) {
while (b != 0) {
long temp = b;
b = a % b;
a = temp;
}
return a;
}
} #include <iostream>
#include <numeric>
using namespace std;
int main() {
long long a, b, x, y;
cin >> a >> b >> x >> y;
long long d = gcd(a, b);
long long pointsPerLine = a + b + 1 - d;
long long totalPoints = 2 * pointsPerLine;
if (a % 2 == 0 || b % 2 == 0) {
totalPoints--;
}
cout << totalPoints << endl;
return 0;
}