您的位置:首页 > 其它

最多约数问题

2015-11-11 14:11 190 查看
#include "stdio.h"
#include "string.h"

const int MAXP = 316;
const int PCOUNT = 34;
int prim[PCOUNT]; //存储素数
bool get[PCOUNT];

//素数筛法
void prims()
{
memset(prim, 0, sizeof(prim));
int i;
for(i=0; i<=MAXP; i++)
get[i] = true;
int j;
for(i=2; i<=MAXP; i++)
if(get[i])
{
j = i + i;
while(j<=MAXP)
{
get[j] = false; //如果是i的倍数,就一定不是素数
j += i;
}
}
int count = 0;
for(i=2; i<=MAXP; i++)
if(get[i])
prim[count++] = i;
}

//返回x中的约数个数
//x = p1^N1 * p2^N2 + ... + pK^NK
//div(x) = (N1+1)*(N2+1)*...*(NK+1)
int div(int x)
{
int count;
int sum = 1;
int i;
for(i=0; i<=MAXP && prim[i]<=x; i++)
{
count = 1;
if(x%prim[i]==0)
{
while(x%prim[i]==0)
{
count++;
x /= prim[i];
}
sum *= count;
}
}
return sum;
}

int main()
{
prims();
int i;
int low, high;
printf("请输入两个正整数:\n");
scanf("%d", &low);
scanf("%d", &high);
int max = 0;
int count = 0;
for(i=low; i<=high; i++)
{
count = div(i);
if(count>max)
max = count;
}
printf("两个正整数之间约数个数最多的数中有%d个约数\n", max);
return 0;
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: