C语言蓝桥杯质因素分解
时间: 2023-10-29 13:35:04 浏览: 43
题目描述
编写程序,将一个整数分解质因数。
例如:输入90,打印出90=2*3*3*5。
输入格式:
输入一个整数N(2<=N<=10000)
输出格式:
按照从小到大的顺序输出分解后的质因数,以“*”分隔,最后一个数后面也要有“*”号。
输入样例:
90
输出样例:
90=2*3*3*5*
算法1
(试除法) $O(\sqrt{n})$
1.从2开始,依次试除,如果能整除,输出这个质因数,再用这个质因数去除原数,重复这个过程,直到剩余的数为1.
C++ 代码
相关问题
c语言蓝桥杯算法讲解
以下是关于C语言蓝桥杯算法的讲解:
1. 蓝桥杯算法题目类型
蓝桥杯算法题目主要分为以下几类:数学题、递推题、搜索题、贪心题、动态规划题、图论题等。
2. 数学题
数学题是蓝桥杯中出现频率最高的一类题目,主要考察对数学知识的掌握和应用能力。常见的数学题目有:最大公约数、最小公倍数、质数判断、进制转换、排列组合等。
3. 递推题
递推题是指通过已知的一些条件,推导出后续的结果。递推题目通常需要使用循环结构来实现。常见的递推题目有:斐波那契数列、汉诺塔、青蛙跳等。
4. 搜索题
搜索题是指在一个状态空间中寻找目标状态的过程。搜索题目通常需要使用递归或循环结构来实现。常见的搜索题目有:深度优先搜索、广度优先搜索、回溯法等。
5. 贪心题
贪心算法是指在每一步选择中都采取当前状态下最优的选择,从而希望导致结果是全局最优的算法。贪心题目通常需要使用排序等方法来实现。常见的贪心题目有:背包问题、活动安排等。
. 动态规划题
动态规划是一种将复杂问题分解成小问题来解决的优化技术。动态规划题目通常需要使用递推或循环结构来实现。常见的动态规划题目有:最长上升子序列、最大子段和等。
7. 图论题
图论是研究图的性质和图之间关系的数学分支。图论题目通常需要使用图的遍历、最短路径等算法来实现。常见的图论题目有:最短路径、最小生成树等。
归并排序c语言蓝桥杯
归并排序是一种常见的排序算法,它采用分治的思想,将待排序的序列不断地分割成较小的子序列,然后再将子序列进行合并,最终得到有序的序列。
归并排序的基本思想是:
1. 将待排序序列不断地二分,直到每个子序列只有一个元素。
2. 将相邻的子序列进行合并,合并时比较两个子序列的元素大小,将较小的元素放入新的临时数组中。
3. 重复步骤2,直到所有子序列都合并为一个有序序列。
以下是归并排序的C语言实现示例(蓝桥杯题目可能会有一些变化,这里给出的是基本的实现):
```c
#include <stdio.h>
// 合并两个有序数组
void merge(int arr[], int left, int mid, int right) {
int i, j, k;
int n1 = mid - left + 1;
int n2 = right - mid;
// 创建临时数组
int L[n1], R[n2];
// 将数据复制到临时数组
for (i = 0; i < n1; i++)
L[i] = arr[left + i];
for (j = 0; j < n2; j++)
R[j] = arr[mid + 1 + j];
// 合并临时数组到原数组
i = 0;
j = 0;
k = left;
while (i < n1 && j < n2) {
if (L[i] <= R[j]) {
arr[k] = L[i];
i++;
} else {
arr[k] = R[j];
j++;
}
k++;
}
// 复制剩余元素
while (i < n1) {
arr[k] = L[i];
i++;
k++;
}
while (j < n2) {
arr[k] = R[j];
j++;
k++;
}
}
// 归并排序
void mergeSort(int arr[], int left, int right) {
if (left < right) {
int mid = left + (right - left) / 2;
// 分割数组
mergeSort(arr, left, mid);
mergeSort(arr, mid + 1, right);
// 合并数组
merge(arr, left, mid, right);
}
}
int main() {
int arr[] = {5, 2, 8, 3, 1};
int n = sizeof(arr) / sizeof(arr);
printf("原始数组:");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
mergeSort(arr, 0, n - 1);
printf("\n排序后的数组:");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
return 0;
}
```