1409: 因子和
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 216 Solved: 50
[ 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
【解析】
这道题我们把1-1000000中每个数的因子给求出来然后再来判断就比较好做了。之后就是按照格式输出了,这里我们用筛选求他的因子和模板和筛法求素数是差不多的。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
using namespace std;
int yin[1001000];
int main()
{
int a,b,n,i,j;
for(i=1;i<=1000000;i++)
{
yin[i]=yin[i]-i;//减去它的因子等于本身的数
for(j=i;j<=1000000;j+=i)
{
yin[j]+=i;//加上因子
}
}
while(~scanf("%d%d",&a,&b))
{
n=a;
for(i=a+1;i<=b;i++)
{
if(yin[i]>=yin[n])//进行比较
n=i;
}
if(n>1)
{
printf("%d = 1",n);
for(i=2;i<n;i++)
{
if(n%i==0)
printf(" + %d",i);
}
}
else
{
printf("0 = 0");//当n<1时不满足条件
}
printf("\n");
}
return 0;
}