前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PTAL1-006 连续因子

PTAL1-006 连续因子

作者头像
用户11036582
发布2024-03-21 18:37:21
840
发布2024-03-21 18:37:21
举报

给大家分享一句我很喜欢我话: 知不足而奋进,望远山而前行!!! 铁铁们,成功的路上必然是孤独且艰难的,但是我们不可以放弃,远山就在前方,但我们能力仍然不足,所有我们更要奋进前行!!! 今天我们更新了连续因子内容

一、题目描述

一个正整数 N 的因子中可能存在若干连续的数字。例如 630 可以分解为 3×5×6×7,其中 5、6、7 就是 3 个连续的数字。给定任一正整数 N,要求编写程序求出最长连续因子的个数,并输出最小的连续因子序列。

输入格式:

输入在一行中给出一个正整数 N(1<N<231)。

输出格式:

首先在第 1 行输出最长连续因子的个数;然后在第 2 行中按 因子1*因子2*……*因子k 的格式输出最小的连续因子序列,其中因子按递增顺序输出,1 不算在内。

输入样例:

630

输出样例:

3 5*6*7

二、本题代码

C++版本:

代码语言:javascript
复制
#include<bits/stdc++.h>

using namespace std;

int prime(int n)
{
    int i;
    for (i = 2; i <= sqrt(n); i++)
    {
        if (n % i == 0)
            return 0;
    }
    return 1;
}

int main()
{
    long long n, i, j;
    cin >> n;
    int start = 0, l = 0;
    long long s = 1;
    
    if (prime(n))
        cout << "1\n" << n << endl;
    else
    {
        
        for (i = 2; i <= sqrt(n); i++)
        {
            s = 1;
            for (j = i; s * j <= n; j++)
            {
                s = s * j;
                
                if (n % s == 0 && j - i + 1 > l)
                {
                    start = i;
                    l = j - i + 1;
                }
            }
        }
        cout << l << endl;
        
        for (i = start; i < start + l; i++)
        {
            if (i == start)
                cout << i;
            else
                cout << "*" << i;
        }
        cout << endl;
    }
    return 0;
}
#include<bits/stdc++.h>

using namespace std;

int prime(int n)
{
    int i;
    for (i = 2; i <= sqrt(n); i++)
    {
        if (n % i == 0)
            return 0;
    }
    return 1;
}

int main()
{
    long long n, i, j;
    cin >> n;
    int start = 0, l = 0;
    long long s = 1;
    
    if (prime(n))
        cout << "1\n" << n << endl;
    else
    {
        
        for (i = 2; i <= sqrt(n); i++)
        {
            s = 1;
            for (j = i; s * j <= n; j++)
            {
                s = s * j;
                
                if (n % s == 0 && j - i + 1 > l)
                {
                    start = i;
                    l = j - i + 1;
                }
            }
        }
        cout << l << endl;
        
        for (i = start; i < start + l; i++)
        {
            if (i == start)
                cout << i;
            else
                cout << "*" << i;
        }
        cout << endl;
    }
    return 0;
}

C语言版本:

代码语言:javascript
复制
#include <stdio.h>
#include <math.h>

int is_prime(int n) {
    int i;
    for (i = 2; i <= sqrt(n); i++) {
        if (n % i == 0)
            return 0;
    }
    return 1;
}

int main() {
    long long n, i, j;
    scanf("%lld", &n);
    int start = 0, l = 0;
    long long s = 1;

    if (is_prime(n))
        printf("1\n%lld\n", n);
    else {
        for (i = 2; i <= sqrt(n); i++) {
            s = 1;
            for (j = i; s * j <= n; j++) {
                s = s * j;

                if (n % s == 0 && j - i + 1 > l) {
                    start = i;
                    l = j - i + 1;
                }
            }
        }
        printf("%d\n", l);

        for (i = start; i < start + l; i++) {
            if (i == start)
                printf("%lld", i);
            else
                printf("*%lld", i);
        }
        printf("\n");
    }
    return 0;
}
#include <stdio.h>
#include <math.h>

int is_prime(int n) {
    int i;
    for (i = 2; i <= sqrt(n); i++) {
        if (n % i == 0)
            return 0;
    }
    return 1;
}

int main() {
    long long n, i, j;
    scanf("%lld", &n);
    int start = 0, l = 0;
    long long s = 1;

    if (is_prime(n))
        printf("1\n%lld\n", n);
    else {
        for (i = 2; i <= sqrt(n); i++) {
            s = 1;
            for (j = i; s * j <= n; j++) {
                s = s * j;

                if (n % s == 0 && j - i + 1 > l) {
                    start = i;
                    l = j - i + 1;
                }
            }
        }
        printf("%d\n", l);

        for (i = start; i < start + l; i++) {
            if (i == start)
                printf("%lld", i);
            else
                printf("*%lld", i);
        }
        printf("\n");
    }
    return 0;
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-03-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、题目描述
    • 输入格式:
      • 输出格式:
        • 输入样例:
          • 输出样例:
          • 二、本题代码
            • C++版本:
              • C语言版本:
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档