急求用C++实现的”最多约数问题”算法,急急急!!先谢谢大侠了!

来源:百度知道 编辑:UC知道 时间:2024/08/21 02:47:21
问题描述:

正整数x 的约数是能整除x 的正整数。正整数x 的约数个数记为div(x) 。例如,1,2, 5,10 都是正整数10 的约数,且div(10)=4 。设a 和b 是2 个正整数,a≤b,找出a 和b 之间约数个数最多的数x。

编程任务:

对于给定的2 个正整数a≤b,编程计算a 和b 之间约数个数最多的数。

数据输入:

输入数据由文件名为input.txt 的文本文件提供。文件的第1 行有2 个正整数a 和b。

结果输出:

程序运行结束时,若找到的a 和b 之间约数个数最多的数是x,将div(x)输出到文件output.txt 中。

输入文件示例 输出文件示例
input.txt output.txt
136 9
这个回答运行不出来啊

在数论中有种,把一个数分解成N个素数的积,再把这些素数的指数加一后,全部相乘的积就是约数的个数了.
例如:36 = 2^2 * 3^2 指数加一的积就是:(2+1)*(2*1) = 9.36有9个约数吧.
24 = 2^3 * 3 指数加一的积就是:(3+1)*(1+1) = 8. 24就有8个约数.
这就是大致的算法吧.

#include <stdio.h>
#include <stdlib.h>

int getDivisor(int iNum)
{
int i = 1;
int sum = 0;
if (0 == iNum)
{
return 1;
}

while (i <= iNum / 2)
{
if (0 == iNum % i)
{
sum++;
}
i++;
}
return (sum+1);
}

void main()
{
FILE* fp;
int a = 0;
int b = 0;
int i = 0;
int maxdiv = 0;
int tmp = 0;
if (NULL == (fp = fopen("input.txt", "r")))
{
printf("erro!\n");
return;
}
if (0 == fscanf(fp, "%d %d", &a,&b))
{
printf(