【题目】
1409: 因子和
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 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; }