L1-6. 连续因子 PAT团体程序设计天梯赛

题目 https://www.patest.cn/contests/gplt/L1-6
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
long long a[1000000],length=0;
long long n;
long long bb,tt=1,pp[100000],ppp[100000];
long long maxn=1;

int dfs(long long sum,long long m)
{
    if(sum>=n){
        return -1;
    }

    for(long long i=m+1;i<length;i++){
        if(a[i-1]==a[i]-1){
            if(sum*a[i]<=n){
                tt++;
            }
    //        cout<<tt<<' '<<maxn<<' '<<a[i]<<' '<<m<<endl;
            if(tt>maxn){
                maxn=tt;
                long long t=tt;
                long long k=i;
                while(t>0){
                    pp[t]=a[k];
                    t--;
                    k--;
                }
            }
        }
        else{
            tt=1;
        }
        int flag=dfs(a[i]*sum,i);
        if(flag==-1){
            tt=1;
            break;
        }
    }
    return -1;
}

int main()
{
    scanf("%lld",&n);
    long long j=0;
    for(long long i=2;i<=sqrt(n)+1;i++){
        if(n%i==0){
            a[j]=i;
            j++;
        }
    }
    length=j;

    if(length==0){
        printf("1\n%lld",n);
        return 0;
    }

    for(long long i=0;i<length;i++){
        tt=1;
  //      cout<<a[i]<<' '<<i<<endl;
        dfs(a[i],i);
    }
    printf("%lld\n",maxn);
    if(maxn==1){
        pp[1]=a[0];
    }
    printf("%lld",pp[1]);
    for(long long i=2;i<=maxn;i++){
        printf("*%lld",pp[i]);
    }
    return 0;
}

你可能感兴趣的:(L1-6. 连续因子 PAT团体程序设计天梯赛)