L1-006 连续因子
题目 连续因子
思路分析
但是有坑
不要用除法 把除法转变成乘法去做
用 product * j 代替 s[r] / s[l - 1]
代码实现
#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
typedef long long LL;
const LL N=2e6;
LL s[N];
int main()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
s[1]=1;
for(int i=2;i<=13;i++){
s[i]=s[i-1]*i;
// if(s[i]>N) break;
}
// for(int i=0;i<=14;i++) cout<<s[i]<<" "; //14项
LL n;cin>>n;
LL maxLen = 0, start = 0;
// for (int l = 2; l <= 13; l++) {
// for (int r = l; r <= 13; r++) {
// if (s[r] / s[l - 1] > n) break;
// if (n % (s[r] / s[l - 1]) == 0) {
// if (r - l + 1 > maxLen) {
// maxLen = r - l + 1;
// start = l;
// }
// }
// }
// }
for (LL l = 2; l <= sqrt(n); l++) {
LL product = 1;
for (LL r = l; r <= n; r++) {
product *= r;
if (product > n) break;
if (n % product == 0) {
LL length = r - l + 1;
if (length > maxLen) {
maxLen = length;
start = l;
}
}
}
}
if (maxLen == 0) {
cout << "1\n" << n << endl;
} else {
cout << maxLen << endl;
for (int i = 0; i < maxLen; i++) {
cout << (i == 0 ? "" : "*") << (start + i);
}
cout << endl;
}
return 0;
}
同类题型
视频讲解
⬅️ L1-005 考试座位号 🏠 00-天梯赛 ➡️ L1-007 念数字
💬 评论