当前位置: 首页 > news >正文

PTA | 连续因子

目录

题目:

输入格式:

输出格式:

输入样例:

输出样例:

代码:

无注释版:

有注释版:


题目:

一个正整数 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

代码长度限制16 KB,时间限制400 ms,内存限制64 MB,栈限制8192 KB

代码:

C++ (clang++)

无注释版:
#include<bits/stdc++.h>
using namespace std;
#define int long long
signed main(){
	int n;
	cin>>n;
	int ma=0,t=0;
	for(int i=2;i*i<=n;i++){
		int k=1,len=0;
		for(int j=i;k*j<=n;j++){
			k*=j;
			len++;
			if(n%k==0&&len>ma){
				ma=len;
				t=i;
			}
		}
	}
	if(ma==0){
		cout<<"1\n"<<n<<"\n";
	}
	else{
		cout<<ma<<"\n";
		for(int i=0;i<ma;i++){
			if(i>0) cout<<"*";
			cout<<t+i;
		}
		cout<<"\n";
	}
}
有注释版: 
#include<bits/stdc++.h>  // 引入所有标准库头文件,包含输入输出和容器等
using namespace std;     // 使用标准命名空间

#define int long long     // 将 int 定义为 long long,支持更大的数字范围

signed main() {
    int n;
    cin >> n;              // 输入一个正整数 N
    
    int ma = 0, t = 0;      // ma 用来记录最长连续因子的长度,t 用来记录最小的连续因子的起始值
    
    // 外循环遍历所有可能的因子 i,i 的范围是从 2 到 sqrt(n),因为因子的配对形式
    // (i, n / i) 一定在 sqrt(n) 内。
    for (int i = 2; i * i <= n; i++) {
        int k = 1, len = 0;  // k 用来存储因子的积,len 用来记录当前连续因子的长度
        
        // 内循环,寻找从 i 开始的连续因子。j 从 i 开始,逐渐增大
        for (int j = i; k * j <= n; j++) {
            k *= j;            // 乘以当前的因子 j
            len++;             // 增加因子的个数
            
            // 如果当前积 k 可以整除 n,且连续因子的长度 len 更大,则更新 ma 和 t
            if (n % k == 0 && len > ma) {
                ma = len;      // 更新最长连续因子的长度
                t = i;         // 更新最小连续因子序列的起始因子
            }
        }
    }
    
    // 如果没有找到连续因子(ma == 0),则输出 1 和 N 本身
    if (ma == 0) {
        cout << "1\n" << n << "\n";  // 输出 1 和 N
    }
    else {
        cout << ma << "\n";           // 输出最长连续因子的个数
        
        // 输出最小的连续因子序列
        for (int i = 0; i < ma; i++) {
            if (i > 0) cout << "*";    // 除了第一个因子,前面的因子之间要输出 '*'
            cout << t + i;              // 输出当前因子
        }
        cout << "\n";                   // 输出换行
    }
}

相关文章:

  • 迁移mysql8到达梦8
  • 护网(蓝中)DNS面试题
  • idea中快速注释函数
  • 2025蓝桥杯JAVA编程题练习Day7
  • YARN Cluster模式和Client模式的区别是什么
  • 若依框架二次开发——启动 RuoYi-Cloud 微服务项目
  • Go常见问题与答案笔记
  • Event driven agentic document workflows 笔记 - 4
  • Redis之大key问题
  • hackthebox1:入门
  • 19,C++——11
  • LeetCode热题100精讲——Top5:盛最多水的容器【双指针】
  • 微服务 - 高级篇
  • NSSRound(持续更新)
  • 【Linux】文件查找、软硬链接、动静态库
  • 2025跳槽学习计划
  • Qt窗口控件之浮动窗口QDockWidget
  • 23种设计模式-创建型模式-建造者
  • 基于AWS Endpoint Security(EPS)的全天候威胁检测与响应闭环管理
  • Docker-初级安装及使用
  • LPR名副其实吗?如果有所偏离又该如何调整?
  • 柬埔寨果农:期待柬埔寨榴莲走进中国市场
  • 舞者王佳俊谈“与AI共舞”:像多了一个舞伴,要考虑它的“感受”
  • 新闻1+1丨强对流天气频繁组团来袭,该如何更好应对?
  • 俄乌直接谈判结束
  • 对谈|“大礼议”:嘉靖皇帝的礼法困境与权力博弈