蓝桥杯学习记录
一、测试练习:
问题名称:分解质因数
问题描述:
求出区间[a,b]中所有整数的质因数分解。
输入格式:
输入两个整数a,b。
输出格式:
每行输出一个数的分解,形如k=a1a2a3…(a1<=a2<=a3…,k也是从小到大的)(具体可看样例)
样例输入:
3 10
样例输出:
3=3
4=22
5=5
6=23
7=7
8=222
9=33
10=25
解题思路:
考虑到逐个分解每个数时间复杂度太高,本题选择分解一个数就将分解的数存起来。又考虑到有重复的数存储,所以选择使用链表,对于重复的数只存储一次,然后将指针直接指向这个数即可。因为使用了这种逐层向上分解的算法,每一层都要存储数据,所以必须从2开始逐层向上,这就需要对输出做一个符合题目输出的判断。
代码:
#include <iostream>
using namespace std;
#define MAX 10000
struct Node
{
int x;
Node* next;
};
int main()
{
Node* dic[MAX];
int a,b,c;
cin>>c>>b;
a = 2;
for(int i = a; i <= b; i++)
{
for(int j = 2; j <= i; j++)
{
int temp = i / j;
if(temp * j == i && i == j)
{
if( i >= c)
cout<<i<<'='<<i<<endl;
Node *p = new Node;
p->x = i;
p->next = NULL;
dic[i] = p;
}
else if(temp * j == i)
{
if( i >= c)
cout<<i<<'='<<j;
Node *p = new Node;
p-> x = j;
p -> next = dic[temp];
dic[i] = p;
p = p->next;
while(p != NULL)
{
if( i >= c)
cout<<'*'<<p->x;
p = p->next;
}
if( i >= c)
cout<<endl;
break;
}
}
}
}