C++
知识点:
vector
#include<vector>
一种容器,或者理解为一种“向量”,一般被称为动态数组,其长度可以根据需要改变
定义:vector<储存的类型> 名
也可以定义vector数组 vector<储存的类型> 名[n] (n为该数组长度)
常用成员函数:
size()//返回返回容器中元素个数
begin()//返回头部迭代器
end()//返回尾部+1迭代器
//通常用于遍历,但是不如下标
rbegin()//返回逆首部迭代器
rend()//返回逆尾部-1迭代器
//通常用于逆序排序eg:
// 使用 sort 对 vector 进行排序,传入逆迭代器作为参数
sort(vec.rbegin(), vec.rend());
front()//返回首个元素
back()//返回尾部元素
push_back()//在末尾添加一个元素
emplace_back()//和push_back()是一样的作用
pop_back()//弹出最后一个元素
empty()//判断是否为空
insert()//在指定位置插入元素
erase()//在指定位置删除元素
clear()//清空容器
遍历:
1.迭代器遍历,(注意得到的是地址,输出要进行取地址)
//顺序
for(it=v.begin();it!=v.end();it++){
cout<<*it<<' ';
}
//逆序输出
for(it=v.rbegin();it!=v.rend();it++){
cout<<*it<<' ';
}
2.下标遍历(常用)
for(int i=0;i<v.size();i++){
cout<<v[i]<<' ';
}
3.foreach(简洁)(不支持逆序)
for(int c:v){
cout<<c<<' ';
}
排序:
sort(v.begin(),v.end());//排完后输出为升序
sort(v.rbegin(),v.rend());//排完后降序
reverse(v.begin(),v.end());//倒置
本题代码:
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
// 判断是否为质数
// 1不是质数,2是质数
bool isPrime(int n) {
if (n <= 1) return false;
for (int i = 2; i <= sqrt(n); ++i) {
if (n % i == 0) return false;
}
return true;
}
// 求连续因子的个数和最小连续因子序列
void findConsecutiveFactors(int N) {
// 边界情况:N 为质数
if (isPrime(N)) {
cout << "1" << endl;
cout << N << endl;
return;
}
int maxLength = 0;
vector<int> factors;
//定义了一个名为 factors 的向量,其中存储的元素类型为整数 (int)。这个向量将用于存储最小连续因子序列
// 从 2 开始尝试作为起始因子
for (int i = 2; i * (i + 1) <= N; ++i) {
long long product = 1;
int length = 0;
for (int j = i; product <= N; ++j) {
product *= j;
length++;
if (N % product == 0 && length > maxLength) {
maxLength = length;
factors.clear();
//清空 factors 向量,以便重新填充新的最小连续因子序列
for (int k = i; k < i + length; ++k) {
factors.push_back(k);
//将新的连续因子添加到 factors 向量的末尾
}
}
}
}
cout << maxLength << endl;
for (int i = 0; i < factors.size(); ++i) {
cout << factors[i];//访问下标输出
if (i < factors.size() - 1) {
cout << "*";
}
}
cout << endl;
}
int main() {
int N;
cin >> N;
findConsecutiveFactors(N);
return 0;
}
Python
# 连续因子
import math
def isprime(n):
if 0 < n <= 1:
return False
else:
for f in range(2, int(math.sqrt(n))+1):
if n % f == 0:
return False
return True
N = int(input())
if isprime(N):
print(1)
print(N)
else:
i, max_length = 2, 0
lst = []
# 以i为起始因子
while i * (i + 1) <= N:
j, length, sum1 = i, 0, 1
while sum1 < N:
sum1 *= j
length += 1
if N % sum1 == 0 and length > max_length:
max_length = length
# 重置列表
lst = []
for k in range(i, i + length):
lst.append(k)
j += 1
i += 1
print(max_length)
for i in range(len(lst) - 1):
print(lst[i], end='*')
print(lst[len(lst) - 1])