这是50分写法
#include <bits/stdc++.h>
using namespace std;
int ans,b0,b1,a0,a1;
bool gys(int x,int y,int z)
{
int cnt=0;
for(int i=1;i<=min(x,y);i++)
{
if(x%i==0&&y%i==0)
{
cnt=max(cnt,i);
}
}
if(cnt==z)
{
return true;
}
else
{
return false;
}
}
bool gbs(int x,int y,int z)
{
for(int i=min(x,y);;i+=min(x,y))
{
if(i%x==0&&i%y==0)
{
if(i==z)
{
return true;
}
else
{
return false;
}
}
}
}
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a0>>a1>>b0>>b1;
for(int j=a1;j<=b1;j++)
{
if(gys(j,a0,a1)&&gbs(j,b0,b1))
{
ans++;
}
}
cout<<ans<<endl;
ans=0;
}
return 0;
}
这是30分写法
#include <bits/stdc++.h>
using namespace std;
int ans,b0,b1,a0,a1;
bool ss(int x,int y)
{
for(int i=2;i<=max(x,y)-1;i++)
{
if(x%i==0||y%i==0)
{
return false;
}
}
return true;
}
int gys(int x,int y)
{
if(ss(x,y))
{
return 1;
}
int cnt=0;
for(int i=1;i<=min(x,y);i++)
{
if(x%i==0&&y%i==0)
{
cnt=max(cnt,i);
}
}
return cnt;
}
int gbs(int x,int y)
{
for(int i=min(x,y);;i+=min(x,y))
{
if(i%x==0&&i%y==0)
{
return i;
}
}
}
int main(){
int n,cnt1,cnt2,cnt3;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a0>>a1>>b0>>b1;
for(int j=a1;j<=b1;j++)
{
cnt1=gys(j,a0);
cnt3=ss(j,b0);
if(cnt1==a1)
{
if(cnt3)
{
if(j*b0==b1)
{
ans++;
}
}
else
{
if(gbs(j,b0)==b1)
{
ans++;
}
}
}
}
cout<<ans<<endl;
ans=0;
}
return 0;
}
望大佬找出合理的优化方案