只使用c语言解决对于两个整数G和L(1
来源:学生作业帮 编辑:大师作文网作业帮 分类:综合作业 时间:2024/09/20 15:22:51
只使用c语言解决
对于两个整数G和L(1
对于两个整数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 );
}
再问: 你好,出现这种情况怎么破
再答: 算法不好,我也没辙了。。。
int getCnt( int G, int L )
{
int cnt=0, a[3], x, y, z;
for( x=G; x<=L; x+=G )
{
if ( L%x != 0 && x%G!=0 ) continue;
for( y=G; y<=L; y+=G )
{
if ( L%y != 0 && y%G!=0 ) continue;
for( z=G; z<=L; z+=G )
{
if ( L%z != 0 && z%G!=0 ) continue;
a[0]=x, a[1]=y, a[2]=z;
if( nGCD(a,3)==G && nLCM(a,3)==L )
{
cnt++;
}
}
}
}
return cnt;
}
再答: 程序改了改,时间快了很多,再优化我也没辙了
#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 );
}
再问: 你好,出现这种情况怎么破
再答: 算法不好,我也没辙了。。。
int getCnt( int G, int L )
{
int cnt=0, a[3], x, y, z;
for( x=G; x<=L; x+=G )
{
if ( L%x != 0 && x%G!=0 ) continue;
for( y=G; y<=L; y+=G )
{
if ( L%y != 0 && y%G!=0 ) continue;
for( z=G; z<=L; z+=G )
{
if ( L%z != 0 && z%G!=0 ) continue;
a[0]=x, a[1]=y, a[2]=z;
if( nGCD(a,3)==G && nLCM(a,3)==L )
{
cnt++;
}
}
}
}
return cnt;
}
再答: 程序改了改,时间快了很多,再优化我也没辙了
只使用c语言解决对于两个整数G和L(1
对于任意输入的两个整数,求出它们的商和余数.C语言 编程
C语言:输入一个2*3的整数矩阵和一个3*2的整数矩阵,使用指针数组实现这两个矩阵的相乘.程序如下:
c语言中,如何从1和-1这两个整数中随机产生一个?
用C语言定义两个函数,分别求两个整数的最大公约数和最小公倍数.
求包含G、G、C、C、L三个字母的英文单词!两个G和C可以出现一次或两次!
输入两个整数和一个实数,求这三个数的和 用C语言
C语言程序问题 求两个整数最大公约数和最小公倍数 求分析思路.
C语言程序 随机选择两个整数和加减法形成算式,要求学生解答.
C语言输入一个n×n的整数矩阵,分别计算两个对角线的和
求C语言程序:求两个整数的最大公约数和最小公倍数.
用C语言编程:任意输入两个整数,求他们的和、差、积、商、、、、