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

总结

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

相关推荐
Jerry14 分钟前
LeetCode 101. 对称二叉树
算法
名字还没想好☜1 小时前
Go slice 的 append 陷阱:共享底层数组导致的数据串改
开发语言·后端·golang·go·slice
bitbrowser1 小时前
Claude 账号频繁被封?转向国内可直接使用的 AI 工具
开发语言·php
可编程芯片开发1 小时前
基于MPPT最大功率跟踪的离网光伏发电系统Simulink建模与仿真
算法
An_s1 小时前
机器学习python之识别图中物品信息
java·linux·开发语言
AI科技星2 小时前
线性算子不是空间映射函数,是全域双螺旋场之间拉伸、旋转、耦合、坍缩的跨空间标准化变换载体《全域数学vs传统数学:人类文明进阶200讲》第80讲
线性代数·算法·矩阵·数据挖掘·回归·乖乖数学·全域数学
小雪_Snow2 小时前
JavaScript 中的三种常用事件
开发语言·前端·javascript
米罗篮2 小时前
矩阵快速幂 (Exponentiation By Squaring Applied To Matrices)
c++·线性代数·算法·矩阵
肖爱Kun2 小时前
C++设计策略模式
开发语言·c++·策略模式
2501_914245932 小时前
C语言与硬件交互:从GPIO到中断的嵌入式编程实践
c语言·单片机·交互