L1-006 连续因子 (20分)

题目

/* 笔记
第一 要是longlong类型的数据
第二关于素数,因为素数只有1和其本身故素数直接输出1和其本身即可
第三 我们for循环遍历是遍历到sqrt(n) 这是因为大于其开方那么肯定没法整除的
第四 就是不断遍历了 其中我用t和tt代替n和i ,一个while循环看看num最多能几个,如果符合就更替
第五 它要的是最小连续子序列 所以我们判断更新num的条件是sum《num 如果是选择大的 那么就是sum<=num;喽
*/

#include<iostream>
#include<math.h>
#include<vector>

typedef long long ll;
using namespace std;
bool isprime(ll n)
{
    //if (n == 1) return 0;

    for (ll i = 2; i <= sqrt(n); i++)
    {
        if (n % i == 0) return 0;
    }
    return 1;
}
int main()
{
    
    ll n;
    cin >> n;
    ll sum = 0,t,tt,num,start;
    for (ll i = 2;i<sqrt(n); i++)
    {
        if (n % i) {//不能整除 直接下一个即可
            continue;
        }
        else {
            num = 0;
            t = n;
            tt = i;
            while (t % tt == 0) //看看最多几位
            {
                num++;
                t /= tt;
                tt++;
            }
            if (sum < num) {  //换
                sum = num;
                start = i;
            }
        }
    }
    if (isprime(n)) cout << "1" << endl << n;
    else
    {
        int f = 0;
        cout << sum << endl;
        for (int i = 0; i < sum; i++)
        {
            if (f) cout << "*";
            cout << start++;
            f = 1;
        }
    }


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值