您的位置:首页 > 其它

最多约数问题。正整数 x 的约数是能整除x的正整数,其约数的个数记为div(x),例如div(10)=4。设 a 和 b 是两个正整数,找出 a 和 b 之间约数个数最多的数 x 的约数个数。 样例

2016-09-04 17:22 501 查看


之前理解错啦,我以为是两个数之间比较呢!!
好吧下面的是两个数之间的比较:
#include <stdio.h>
#include <math.h>
int main()
{
int     a, b;
int     numa = 0, numb = 0, num;
printf( "输入两个数(中间用空格隔开):" );
scanf( "%d %d", &a, &b );
for ( int i = 1; i <= sqrt( a ); i++ )
{
if ( a % i == 0 )
{
numa++;
}
}

for ( int i = 1; i <= sqrt( b ); i++ )
{
if ( b % i == 0 )
{
numb++;
}
}
if ( b % 2 == 0 )
{
numb = (numb - 1) * 2 + 1;
}else
numb = numb * 2;
if ( a % 2 == 0 )
{
numa = (numa - 1) * 2 + 1;
}else
numa = numa * 2;

num = (numa > numb) ? numa : numb;
printf( "%d\n", num );
return(0);
}
下面的是真正符合题意得:
如有问题大家提出来交流一下哈
#include <stdio.h>
#include <math.h>
#define max 100
int main()
{
int	a, b;
int	big, small, flag;
int	count[max] = { 0 };
printf( "输入两个数(中间用空格隔开):" );
scanf( "%d %d", &a, &b );
big	= (a > b ? a : b);
small	= (a < b ? a : b);
for ( flag = small; flag <= big; flag++ )
{
for ( int i = 1; i <= sqrt( flag ); i++ )

if ( flag % i == 0 )
{
count[flag]++;
}
}
for ( flag = small; flag <= big; flag++ )
if ( flag % 2 == 0 )
{
count[flag] = (count[flag] - 1) * 2 + 1;
}else
count[flag] = count[flag] * 2;

for ( flag = small; flag < big; flag++ )
if ( count[flag] > count[flag + 1] )
{
int swap = count[flag];
count[flag]	= count[flag + 1];
count[flag + 1] = swap;
}
printf( "%d", count[flag] );
return(0);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法
相关文章推荐