最多约数问题

来源:互联网 发布:java nanotime 不准 编辑:程序博客网 时间:2024/05/17 02:29
#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;}

这里写图片描述

0 0
原创粉丝点击