zcmu 1409 因子和

【题目】

1409: 因子和

Time Limit: 1 Sec   Memory Limit: 128 MB
Submit: 255   Solved: 63
[ Submit][ Status][ Web Board]

Description

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

Input

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

Output

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

Sample Input

1 10

Sample Output

10 = 1 + 2 + 5


【题解】

把每个数的因子和用素数筛法算出来进行比较,再输出因子。

好像没有挂过素数筛就借这题挂一下。时间复杂度O(n)。

int prime[maxn];
void isprime()
{
    int i,j;
    memset(prime,1,sizeof(prime));
    for(i=2;i<=maxn/2;i++)
        for(j=i+i;j<maxn;j+=i)
            prime[j]=0;
}

【代码】

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6;
int sum[maxn+5];
void init()
{
    int i,j;
    memset(sum,1,sizeof(sum));
    for(i=2;i<=maxn/2;i++)
        for(j=i+i;j<maxn;j+=i)
            sum[j]+=i;
}
int main()
{
    init();
    int a,b,i;
    while(~scanf("%d%d",&a,&b))
    {
        int c=0,t;
        for(i=a;i<=b;i++)
           if(sum[i]>c)
           {
              c=sum[i];
              t=i;
           }
        printf("%d = 1",t);
        for(i=2;i<=t/2;i++)
            if(t%i==0)
               printf(" + %d",i);
        putchar('\n');
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_41117236/article/details/80739505