1096 Consecutive Factors (20 分)难度: 一般 / 爆搜 数论

Posted 辉小歌

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1096 Consecutive Factors (20 分)难度: 一般 / 爆搜 数论相关的知识,希望对你有一定的参考价值。


https://pintia.cn/problem-sets/994805342720868352/problems/994805370650738688
注意测试点1: 72=2*3*3*4
我这里是直接先分解因子,将所有因子存一下,然后爆搜。

#include<bits/stdc++.h>
using namespace std;
vector<int>a,ve,ans;
void dfs(int n,int index)

    if(n==1)
    
        vector<int>temp;
        int l=0,r=0;//存一下最大的连续的因子的左右边界
        for(int i=0;i<ve.size();i++) 
        
            int j=i;
            while(j+1!=ve.size()&&ve[j+1]-ve[j]==1) j++;
            if(j-i>r-l) r=j,l=i;
        
        for(int i=l;i<=r;i++) temp.push_back(ve[i]);
        if(temp.size()>ans.size()) ans=temp;
        else if(temp.size()==ans.size()&&temp<ans) ans=temp;
        return;
    
    for(int i=index;i<a.size();i++)
    
        if(n%a[i]==0)
        
            ve.push_back(a[i]);
            dfs(n/a[i],index);
            ve.pop_back();
        
    

int main(void)

    int n; cin>>n;
    for(int i=1;i<=n/i;i++)
    
        if(n%i==0)
        
            a.push_back(i);
            if(i!=n/i) a.push_back(n/i);
        
    
    sort(a.begin(),a.end());//从小到大排序
    dfs(n,1);
    cout<<ans.size()<<endl;
    for(int i=0;i<ans.size();i++) 
    
        cout<<ans[i];
        if(i!=ans.size()-1) cout<<"*";
    
    return 0;

考虑到其每一个都是因子,故我们直接可以暴力枚举所有的连续子串即可。

#include<bits/stdc++.h>
using namespace std;
vector<int>a;
int main(void)

    int n; cin>>n;
    for(int i=1;i<=n/i;i++)
    
        if(n%i==0)
        
            a.push_back(i);
            if(n/i!=i) a.push_back(n/i);
        
    
    sort(a.begin(),a.end());
    int l=1,r=1;
    for(int i=1;i<a.size();i++)
    
        int j=i;
        long long int temp=a[i];
        while(j+1!=a.size()&&a[j+1]-a[j]==1) //连续子串
        
            j++,temp*=a[j];
            if(j-i>r-l&&n%temp==0) r=j,l=i;//如果连续子串的长度大于之前的,且可以整除。
        
    
    cout<<r-l+1<<endl;
    for(int i=l;i<=r;i++) 
    
        cout<<a[i];
        if(i!=r) cout<<"*";
    
    return 0;

以上是关于1096 Consecutive Factors (20 分)难度: 一般 / 爆搜 数论的主要内容,如果未能解决你的问题,请参考以下文章

1096. Consecutive Factors (20)

1096. Consecutive Factors (20)

PAT 1096 Consecutive Factors[难]

PAT 1096. Consecutive Factors

PAT 甲级 1096 Consecutive Factors

1096 Consecutive Factors