连续因子

发布时间 2023-07-04 09:30:11作者: 软件拓荒人

 

#include<iostream>
#include<cmath>
#define ll long long      //-2^64“ 到”2^64 -1
using namespace std;
int main()
{
    ll n;  //输入的数
    ll sum=0,start;  //sum代表因子总数,start代表连续因子开始的位置
    cin>>n;
    for(int i=2;i<=sqrt(n);i++)
    {
        if(n%i!=0)   //如果不是因子跳过
            continue;
        ll a=n;    //这里要转存一下
        ll b=i;
        ll num=0;
        while(a%b==0&&a!=0)   //暴力得到所有连续因子
        {
            a/=b;   //保证了得到的是刚好乘积等于n的连续因子
            b++;    //让b增加得到连续
            num++;  //记录连续因子个数
        }
        if(sum<num)   
        {
            sum=num;   //更新sum,此处不能用<=,因为我们时从小到大遍历的,所以当长度相同时不交换
             start=i;   //得到起始位置
        }
    }
 if(sum==0)  //代表只能被自己整除,是素数
 {
 cout<<1<<endl<<n<<endl;
    
 }
    else{
        cout<<sum<<endl;   
    for(int i=start;i<sum+start;i++)  
    {
        if(i-start==0)   //如果只有一个前面就不需要*号了
            cout<<i;
        else
            cout<<"*"<<i;
     }
    }
    return 0;
}