标签:
求n最多有多少个连续因子,并把这最多的输出来
#include<stdio.h> #include<iostream> #include<string.h> #include<cmath> #include<algorithm> using namespace std; #define N 20055 #define met(a, b) memset(a, b, sizeof(a)) typedef long long LL; int MaxLen, len, ans[N], b[N]; void dfs(int n, int k, int len) { if(MaxLen<len)///更新结果; { MaxLen = len; for(int i=0; i<len; i++) ans[i] = b[i]; } if(n%k==0 && n!=0) { b[len]=k;///当前数开始的最大可能达到的连续因子; dfs(n/k, k+1, len+1);///接着进行下一个数看是否是n的因子; } } int main() { int n; while(scanf("%d", &n)!=EOF) { int k = (int)sqrt(n); MaxLen = 0;///最长的连续因子数; met(ans, 0);met(b, 0); for(int i=2; i<=k; i++)///从当前数开始的连续因子; dfs(n, i, 0); if(MaxLen==0 && n!=0) { printf("1\n%d\n", n); continue; } printf("%d\n", MaxLen); for(int i=0; i<MaxLen; i++) printf("%d%c", ans[i],i==MaxLen-1?‘\n‘:‘*‘); } return 0; }
标签:
原文地址:http://www.cnblogs.com/zhengguiping--9876/p/5005253.html