乘积最大

乘积最大

问题描述:

将一个正整数n分为若干个自然数的和,这些自然数可以相同,(n>1)。你的任务是求整数n的所有这样的和项表示中加数之积的最大值A。但通常由于数很大,直接表示它会有一些困难,为方便起见,我们将A用整数标准分解的方式表示,即A= ,其中诸 是素数,而指数 。于是将A表示成素因数、指数的序列形式

       

输入:

输入文件有若干行,每行有一个整数n1n50000

输出:

对输入中的每个整数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;  
} 

posted on 2011-07-22 21:56  kuangbin  阅读(367)  评论(0编辑  收藏  举报

导航

JAVASCRIPT: