L1-006 连续因子

题目 连续因子

image-3310688a

思路分析

image-450cb220

但是有坑

不要用除法 把除法转变成乘法去做

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 念数字