您的位置:首页 > 其它

hdu 2964 Prime Bases

2013-04-16 20:46 260 查看
/*

题意:将一个32位的数n, 拆分成从小到大的素数的乘积(如果乘积不超过n),再乘上n除去素数积的的值 ,以此类推,把n分解完;

*/

#include<iostream>
using namespace std;
int a[11][2];
int prime[12] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31};
int t;

int A(int x)
{
int i, j;
__int64 sum = 1;
for( i=0; sum <= x; i++ )
sum *= prime[i];
sum /= prime[i-1];
a[t][0] = i-2;
if(sum != 0)
a[t++][1] = x / sum;
return  x % sum;
}

int main()
{
int n;
while(scanf("%d", &n) != EOF  && n)
{
t = 0;
printf("%d =", n);
memset(a, 0, sizeof(a));
int i, j;
while(n >= 1)
n = A(n);

bool p = false;
for( i=t-1; i >= 0; i-- )
{
if(p)
printf(" +");
p = true;
printf(" %d",a[i][1]);
if(a[i][0] > -1)
{
for( j=0; j <= a[i][0]; j++ )
printf("*%d", prime[j]);
}
}
printf("\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: