《算法每日一题(1)--- 连续因子》

《算法每日一题(1)--- 连续因子》

文章目录


前言

本系列为笔者的练习分享,题目难度适中适合刚入门(笔者也是刚入门)算法的同学学习,希望能和大家见证算法编程和逻辑思维的进步

一、连续因子---2016年天梯赛

1.1 题目

1.2 算法原理

首先我们要明确我们要输出的是最小的连续因子序列 ,也就是如果有两端长度相同的序列取小的那一段就可以了

接下来我们要解决两个问题:
(1) 如何找出这段序列:

解:这个时候我们就可以借鉴求解一个数是否是素数的方式 ,既一个数x如果有两个因子a和b,那必然有一个因子是小于等于根号x的 ,那我们便可以遍历2到根号x来求解连续因子
(2) 如何输出这一段序列

解:我们可以定义一个变量st每次求出一段序列便把序列头赋值给st,依照最后求出的长度使用一个for循环遍历输出就可以了

1.3 代码

c 复制代码
#include <iostream>
#include <cmath>
using namespace std;

int main()
{
	int n;
	cin >> n;

	//当n是合数时
	int st = 0; //记录序列头
	int ans = 0; //序列的最长长度
	for (int i = 2; i <= sqrt(n); i++)
	{
		int j = i;
		int len = 0; //当前连续序列的长度
		int result = 1;
		if (n % i == 0) 
		{
			while (1)
			{
				result *= j;
				if (n % result != 0) //不满足
					break;
				len++;

				if (ans < len) //序列长度相同取前面小的一段:更新长度 + 因子序列的开头
				{
					ans = len;
					st = i;
				}
				j++;
			}
		}
	}

	//如果n是质数
	if (ans == 0)
	{
		ans = 1;
		st = n;
	}

	cout << ans << endl;
	for (int i = 0; i < ans; i++)
	{
		if (i > 0)
			cout << "*";
		cout << st + i;
	}
	cout << endl;
	return 0;
}

总结

今天就到这里,大家明天见

相关推荐
ZTLJQ5 小时前
序列化的艺术:Python JSON处理完全解析
开发语言·python·json
2401_891482175 小时前
多平台UI框架C++开发
开发语言·c++·算法
88号技师6 小时前
2026年3月中科院一区SCI-贝塞尔曲线优化算法Bezier curve-based optimization-附Matlab免费代码
开发语言·算法·matlab·优化算法
t198751286 小时前
三维点云最小二乘拟合MATLAB程序
开发语言·算法·matlab
无敌昊哥战神6 小时前
【LeetCode 257】二叉树的所有路径(回溯法/深度优先遍历)- Python/C/C++详细题解
c语言·c++·python·leetcode·深度优先
m0_726965986 小时前
面面面,面面(1)
java·开发语言
x_xbx6 小时前
LeetCode:148. 排序链表
算法·leetcode·链表
Darkwanderor6 小时前
三分算法的简单应用
c++·算法·三分法·三分算法
2401_831920747 小时前
分布式系统安全通信
开发语言·c++·算法
~无忧花开~7 小时前
React状态管理完全指南
开发语言·前端·javascript·react.js·前端框架