因子和与因子个数

1.求因子和

例题:

Description

求一个数的因子和很简单,所以小明很懒就想让你帮忙算一下区间a到b中哪个数的因子和最大,并输出这个数和他的每个因子。

Input

输入a和b,(0<a<=b<10^6).

Output

输出这个数和他的每个因子(相同情况输出最小的),因子从小到大输出。

Sample Input

1 10

Sample Output

10 = 1 + 2 + 5

代码

#include<bits/stdc++.h>
#define MAX 1000005
using namespace std;
int num[MAX];
int main()
{
    int i,j,a,b,up;
    up=MAX+5;
    //求因子和核心算法
    for(i=1;i<=up;i++)
    {
        num[i]-=i;
        for(j=i;j<=up;j+=i)
        {
            num[j]+=i;
        }
    }
    while(~scanf("%d%d",&a,&b))
    {
        int maxl=a;
        for(i=a+1;i<=b;i++)
        {
            if(num[maxl]<num[i])
                maxl=i;
        }
        printf("%d = 1",maxl);
        for(i=2;i<=maxl/2;i++)
        {
            if(maxl%i==0)
              printf(" + %d",i);
        }
       printf("\n");
    }
    return 0;
}

2.求因子个数

 方法:判断数,如果数不为1,则其因子数起码有两个(自身和1)

           然后从i=2开始到sqrt(num)做循环,如果num%i==0,则因子数+2

           当然如果两个因子数相同,是必须要去重的

#include<stdio.h>
#include<math.h>
int solve(int x) //返回因子总数
{
    if(x==1) return 1;
    int up=sqrt(x),count=2;
    for(int i=2;i<=up;i++)
    {
        if(x%i==0)
        {
            if(i==up&&x/i==i) //如果两因子相同,则+1
                count+=1;
            else
                count+=2;
        }
    }
    return count;
}
int main()
{
    int n;
    while(~scanf("%d",&n))
    {
        int temp=solve(n);
        printf("%d\n",temp);
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/ZCMU_2024/article/details/81605819
今日推荐