只使用c语言解决对于两个整数G和L(1
来源:学生作业帮助网 编辑:作业帮 时间:2024/10/20 09:09:33
只使用c语言解决对于两个整数G和L(1
只使用c语言解决
对于两个整数G和L(1
只使用c语言解决对于两个整数G和L(1
#include <stdio.h>
#include <stdlib.h>
int GCD( int a, int b )
{
return b ? GCD( b, a%b ) : a;
}
int LCM( int a, int b )
{
return (a*b)/GCD(a,b);
}
int nGCD( int *a, int n )
{
if ( n==1 ) return *a;
return GCD( a[n-1], nGCD(a,n-1) );
}
int nLCM( int *a, int n )
{
if ( n==1 ) return *a;
return LCM( a[n-1], nLCM(a,n-1) );
}
int getCnt( int G, int L )
{
int cnt=0, a[3], x, y, z;
for( x=G; x<=L; x++ )
{
if ( L%x != 0 ) continue;
for( y=G; y<=L; y++ )
{
if ( L%y != 0 ) continue;
for( z=G; z<=L; z++ )
{
if ( L%z != 0 ) continue;
a[0]=x, a[1]=y, a[2]=z;
if( nGCD(a,3)==G && nLCM(a,3)==L )
{
cnt++;
}
}
}
}
return cnt;
}
int main()
{
int n=0, *G, *L, *CNT, i;
scanf( "%d", &n );
if ( n <= 0 ) return 1;
CNT = (int*)malloc( n*sizeof(int) );
G = (int*)malloc( n*sizeof(int) );
L = (int*)malloc( n*sizeof(int) );
for( i=0; i<n; i++ )
scanf( "%d %d", &G[i], &L[i] );
for( i=0; i<n; i++ )
{
CNT[i] = getCnt( G[i], L[i] );
printf( "%d\n", CNT[i] );
}
free( CNT );
free( L );
free( G );
}