洛谷 B3715 分解质因子 2 C语言

题目:

B3715 分解质因子 2 - 洛谷 | 计算机科学教育新生态

题目描述

给定一个正整数 n,设 n=p1​×p2​×...×pk​,其中 pi​ 均为质数,对 1≤i<k,pi​≤pi+1​。

可以证明,序列 pi​ 是唯一的。

对每个给定的 n,请你求出 p1​,p2​,...,pk​。

输入格式

本题单测试点内有多组测试数据。

第一行是一个整数,表示测试数据组数 T。

接下来 T 行,每行一个整数,表示一组数据的 n。

输出格式

对每组数据,输出一行若干个用空格隔开的整数,依次表示 p1​,p2​,...,pk​。

输入输出样例

输入 #1

复制代码
9
2
3
2
4
5
6
7
8
10

输出 #1

复制代码
2
3
2 2
2 2
2 3
2 2 2
3 3
2 5

说明/提示

数据规模与约定

对全部的测试点,保证 1≤T≤10,1≤n≤10的12次方。

思路:

题目很明确的告诉我们,pi都是质数,所以我们可以直接枚举2~sqrt(n)就好了。注意,如果n再除去2~sqrt(n)之内的因子,自己本身也可能大于sqrt(n)。所以要特判一下,如果n>1,就输出n。

有人可能会问,那么直接枚举到n不就好了,这样是会超时的。

代码如下:

复制代码
#include<iostream>
using namespace std;
typedef long long ll;
const ll N = 1e6;
ll T,n; 
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin >> T;
	while(T--)
	{
		cin >> n;
		for(ll i = 2 ; i * i <= n ; i++)
		{
				if(n % i == 0)//判断是否是因数 
				{
					while(n % i == 0)
					{
						cout << i << " ";//输出因数i 
						n = n / i;//更新n 	
					}
				}	
		}
		if(n > 1)//n剩下来的数就是比sqrt(n)大,也是一个质数。 
		cout << n << " ";
		cout << '\n';
	}
	return 0;
}
相关推荐
汉克老师5 小时前
第十四届蓝桥杯青少组C++选拔赛[2023.2.12]第二部分编程题(5、机甲战士)
c++·算法·蓝桥杯·01背包·蓝桥杯c++·c++蓝桥杯
Mr_Xuhhh6 小时前
项目需求分析(2)
c++·算法·leetcode·log4j
c++bug7 小时前
六级第一关——下楼梯
算法
Morri37 小时前
[Java恶补day53] 45. 跳跃游戏Ⅱ
java·算法·leetcode
林木辛7 小时前
LeetCode热题 15.三数之和(双指针)
算法·leetcode·双指针
AndrewHZ8 小时前
【3D算法技术】blender中,在曲面上如何进行贴图?
算法·3d·blender·贴图·三维建模·三维重建·pcg
Jared_devin8 小时前
二叉树算法题—— [蓝桥杯 2019 省 AB] 完全二叉树的权值
数据结构·c++·算法·职场和发展·蓝桥杯
AI 嗯啦9 小时前
数据结构深度解析:二叉树的基本原理
数据结构·算法
和光同尘@10 小时前
66. 加一 (编程基础0到1)(Leetcode)
数据结构·人工智能·算法·leetcode·职场和发展
CHEN5_0210 小时前
leetcode-hot100 11.盛水最多容器
java·算法·leetcode