hdu 2964 Prime Bases

来源:互联网 发布:linux下重装nodejs 编辑:程序博客网 时间:2024/05/18 03:14

/*

题意:将一个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;}