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

总结

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

相关推荐
流浪大叔3 小时前
Python下载实战技巧的技术文章大纲
开发语言·python
祁同伟.3 小时前
【C++】异常
开发语言·c++
yuuki2332333 小时前
【C语言】程序的编译和链接(基础向)
c语言·后端
whm27773 小时前
Visual Basic 文件系统控件
开发语言·visual studio
00后程序员张3 小时前
Jenkins Pipeline post指令详解
java·开发语言
万粉变现经纪人3 小时前
如何解决 pip install -r requirements.txt 子目录可编辑安装缺少 pyproject.toml 问题
开发语言·python·scrapy·beautifulsoup·scikit-learn·matplotlib·pip
第七序章3 小时前
【C + +】红黑树:全面剖析与深度学习
c语言·开发语言·数据结构·c++·人工智能
夜晚中的人海3 小时前
【C++】滑动窗口算法习题
开发语言·c++·算法
~无忧花开~3 小时前
CSS学习笔记(五):CSS媒体查询入门指南
开发语言·前端·css·学习·媒体