hhhh2971 @ 2023-08-31 10:15:49
#include<bits/stdc++.h>
using namespace std;
bool maxgcd(int x,int y,int p)
{
int ans;
for (int i=1;i<=min(x,y);i++)
if (x%i==0 && y%i==0) ans=i;
if (ans==p) return true;
return false;
}
bool minlcm(int x,int y,int p)
{
for (int i=max(x,y);true;i=i+max(x,y))
if (i%x==0 && i%y==0)
{
if (i==p) return true;
return false;
}
}
int main()
{
int x,y;
int sum=0;
int cur=0;
cin >> x >> y;
for (int i=x;i<y;i++)
for (int j=i+1;j<=y;j++)
if (maxgcd(i,j,x) && minlcm(i,j,y) && i!=j)
{
//cout << "&&&" << i << " " << j << endl;
sum++;
}
cout << sum*2-cur << endl;
return 0;
}
by jiangzining @ 2023-09-10 19:05:54
a和b的最小公倍数=a*b/a和b的最大公约数,30层的第二层循环可以不要,然后把j替换成a乘b除i。
by jiangzining @ 2023-09-10 19:21:38
判断函数可以使用gcd函数
by jiangzining @ 2023-09-10 19:27:31
我的代码:
#include<iostream>
#include<cmath>
using namespace std;
int m,n,ans,flag;
long long gcd(long long x,long long y){
if(y==0){
return x;
}
return gcd(y,x%y);
}
int main(){
cin>>n>>m;
for(long long i=1;i<=sqrt(1*m*n);i++){
if((n*m)%i==0&&gcd(i,(n*m)/i)==n){
ans++;
if(i*i==n*m){
flag=1;
}
}
}
cout<<ans*2-flag;
return 0;
}
by hhhh2971 @ 2024-08-05 10:53:28
@jiangzining 谢谢大佬,我之前没看见,太抱歉了