Algorithm 对角线以N个正方形通过的不同矩形的数目
我正在解决CS问题,不需要什么帮助。我有数字N,我需要计算不同的矩形的数量,如果矩形在大小为1x1的矩形上分割,对角线以N个正方形的形式通过。这张照片会帮助你理解 这张图片显示了所有4种组合,如果N=4,实际上对角线在4个正方形中穿过的矩形的尺寸为1x4、2x3、4x2和4x4 我找到了公式,如果我们给出两个矩形的尺寸,它是: A+B-gcd(A,B) 自Na)互换(a,b); 如果(b==0),则返回a; 返回gcd(b,a%b); } 布尔有效(整数n,整数m,整数gc,整数a){ 如果(n+m-gc==a)返回true; 返回false; } int main(){ cin>>a; int计数器=0;Algorithm 对角线以N个正方形通过的不同矩形的数目,algorithm,computer-science,combinatorics,Algorithm,Computer Science,Combinatorics,我正在解决CS问题,不需要什么帮助。我有数字N,我需要计算不同的矩形的数量,如果矩形在大小为1x1的矩形上分割,对角线以N个正方形的形式通过。这张照片会帮助你理解 这张图片显示了所有4种组合,如果N=4,实际上对角线在4个正方形中穿过的矩形的尺寸为1x4、2x3、4x2和4x4 我找到了公式,如果我们给出两个矩形的尺寸,它是: A+B-gcd(A,B) 自Na)互换(a,b); 如果(b==0),则返回a; 返回gcd(b,a%b); } 布尔有效(整数n,整数m,整数gc,整数a){ 如果(
对于(inti=1;i虽然
O(n*sqrt(n)*log(n))
听起来有点像n,请显示您的代码。我发布了我的代码。非常感谢您的回答,我更改了您告诉我的所有内容,但我认为最大的问题是,我是以递归方式而不是迭代方式计算GCD。
#include <bits/stdc++.h>
#define ll long long
using namespace std;
int a;
int gcd(int a, int b) {
if(b>a) swap(a,b);
if(b==0) return a;
return gcd(b, a%b);
}
bool valid(int n, int m, int gc, int a) {
if(n+m-gc==a) return true;
return false;
}
int main() {
cin>>a;
int counter=0;
for(int i=1;i<=a/2;i++) {
for(ll j=1;j<=sqrt(i);j++) {
if(i%j==0) {
if(j!=i/j) {
int m1 = a+j-i;
int div=i/j;
int m2 = a+div-i;
if(valid(i, m1, j, a)) {
if(gcd(i, m1)==j)
counter++;
}
if(valid(i, m2, i/j, a)) {
if(gcd(i,m2)==i/j)
counter++;
}
}
else {
int m1 = a+j-i;
if(valid(i, m1, j, a)) {
if(gcd(i, m1)==j)
counter++;
}
}
}
}
}
cout<<counter+1;
return 0;
}
int gcd(int a, int b) {
if(b>a) swap(a,b);
if(b==0) return a;
return gcd(b, a%b);
}
int gcd(int a, int b) {
while (b) {
int r = a % b;
a = b;
b = r;
}
return a;
}
for(int i=1;i<=a/2;i++) {
for(ll j=1;j<=sqrt(i);j++) {