A1096 Consecutive Factors (20point(s))
题意
要求寻找出最长的连续序列,该序列元素相乘能够被给定的n整除。
思路
由于是连续的,所以深搜到不能整除的时候比较和保持最优解,再从下一个开头数字开始即可。
Sample Input:
630
Sample Output:
3
5*6*7
#include"bits/stdc++.h"
using namespace std;
int n;
int sqrtN; // sqrt(n)
int t; // divider,copy of n
int ans_head; //ans head
int ans_len = 0;
int head; //head for now
void dfs(int x){
if(x > sqrtN)
return;
if(t%x){
t = n; //reset divider: t
int len = x - head;
if(len > ans_len){
ans_len = len;
ans_head = head;
}
head = x-len+1; //next head
dfs(head);
}else{
t /= x;
dfs(x+1);
}
}
int main(){
// freopen("input.txt","r",stdin);
cin >> n;
sqrtN = sqrt(n)+1;
t = n;
head = 2;
dfs(head);
if(ans_len == 0){
printf("1\n%d\n",n);
return 0;
}
cout << ans_len << endl;
for(int i=0;i<ans_len;i++){
if(i != ans_len-1)
printf("%d*",ans_head+i);
else
printf("%d\n",ans_head+i);
}
}