#include <iostream> #include <cstdio> #include <cmath> #include <cstring> #include <algorithm> #include<vector> using namespace std ; typedef long long ll; const int N = 100000 + 10; const int mod = 1e9 + 7; ll n; int a[20] = {2,3,5,7,11,13,17,19,23,29,31,37,41,43}; ll ans[N]; ll sum[50]; int main() { sum[0] = 2; for(int i = 1; i <= 13; i++) sum[i] = sum[i-1] * a[i]; while(~scanf("%lld",&n)) { if(!n) break; int cool = 0; printf("%lld = ",n); memset(ans,0,sizeof(ans)); for(int i = 13; i >= 0; i--) { if(n / sum[i]) { ll tmp = n / sum[i]; n = n % sum[i]; ans[i] = tmp; cool++; } } int f = 0; if(n) printf("1"),f = 1; for(int i = 0; i <= 13; i++) { if(ans[i]) { cool--; if(f)printf(" + "),f=0; printf("%lld",ans[i]); for(int j = 0; j <= i; j++) printf("*%d",a[j]); if(cool!=0) printf(" + "); } } printf("\n"); } return 0; }
UVALive 4225 / HDU 2964 Prime Bases 贪心
原文:http://www.cnblogs.com/zxhl/p/5152623.html