乘积最大
乘积最大
问题描述:
将一个正整数n分为若干个自然数的和,这些自然数可以相同,(n>1)。你的任务是求整数n的所有这样的和项表示中加数之积的最大值A。但通常由于数很大,直接表示它会有一些困难,为方便起见,我们将A用整数标准分解的方式表示,即A=
输入:
输入文件有若干行,每行有一个整数n,1≤n≤50000。
输出:
对输入中的每个整数n,用一行输出对应的和项表示中加数之积最大值A的标准分解中素因数、指数的序列形式。
输入样例:
4
2000
输出样例:
2 2
2 1 3 666
#include<stdio.h> #include<iostream> using namespace std; int cnt2,cnt3; void dfs(int n) { if(n==2) {cnt2++;return;} else if(n==3) {cnt3++;return;} else if(n%2==0) {dfs(n/2);dfs(n/2);} else if(n%2!=0) {dfs((n+1)/2);dfs((n-1)/2);} } int main() { freopen("test.in","r",stdin); freopen("test.out","w",stdout); int n; while(scanf("%d",&n)!=EOF) { cnt2=cnt3=0; dfs(n); cnt3=cnt3+2*(cnt2/3); cnt2=cnt2%3; if(cnt2!=0) printf("2 %d ",cnt2); if(cnt3!=0) printf("3 %d",cnt3); printf("\n"); } return 0; }
人一我百!人十我万!永不放弃~~~怀着自信的心,去追逐梦想