最大分解
问题描述
给出一个正整数n,求一个和最大的序列a0,a1,a2,……,ap,满足n=a0>a1>a2>……>ap且ai+1是ai的约数,输出a1+a2+……+ap的最大值
输入格式
输入仅一行,包含一个正整数n
输出格式
一个正整数,表示最大的序列和,即a1+a2+……+ap的最大值
样例输入
10
样例输出
6
数据规模和约定
1<n<=106
样例说明
p=2
a0=10,a1=5,a2=1,6=5+1
代码思路 :直接从大到小暴力 枚举除数
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
const int N = 1e6;
int a[N];
int main()
{
int n; cin >> n;
int i = 0;
while(a[i ++] != 1) //除数不为1 说明可能可以分解
{
for(int j = n - 1; j > 0; j --) //从这个数-1开始计算
{
if(n % j == 0 && j != a[i - 1]) //可以整除 不等于上一个数
{
n = j;
a[i] = j;
break;
}
}
}
int res = 0;
while(i) //把除数都加上
{
res += a[i--];
}
cout <<res;
return 0;
}
本题:最大分解