《算法每日一题(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;
}

总结

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

相关推荐
CaracalTiger7 分钟前
本地部署 Stable Diffusion3.5!cpolar让远程访问很简单!
java·linux·运维·开发语言·python·微信·stable diffusion
whm277713 分钟前
Visual Basic 创建状态栏
开发语言·visual studio
CoovallyAIHub25 分钟前
空间智能!李飞飞、LeCun&谢赛宁联手提出“空间超感知”,长文阐述世界模型蓝图
深度学习·算法·计算机视觉
Dave.B32 分钟前
【VTK核心过滤器详解】:vtkCleanPolyData 多边形数据清洗实战指南
算法·vtk
落笔映浮华丶33 分钟前
蓝桥杯零基础到获奖-第4章 C++ 变量和常量
java·c++·蓝桥杯
培林将军43 分钟前
Visual Studio Code 之C/C++开发编译环境搭建
c语言·c++·vscode
api_180079054601 小时前
【技术教程】Python/Node.js 调用拼多多商品详情 API 示例详解
大数据·开发语言·python·数据挖掘·node.js
AiXed1 小时前
PC微信 device uuid 算法
前端·算法·微信
郑州光合科技余经理1 小时前
乡镇外卖跑腿小程序开发实战:基于PHP的乡镇同城O2O
java·开发语言·javascript·spring cloud·uni-app·php·objective-c
@木辛梓1 小时前
指针,数组,变量
开发语言·c++·算法