洛谷 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;
}
相关推荐
qystca28 分钟前
蓝桥云客---九宫幻方
算法·深度优先·图论
明月清了个风1 小时前
数据结构与算法学习笔记----贪心区间问题
笔记·学习·算法·贪心算法
努力毕业的小土博^_^1 小时前
【EI/Scopus双检索】2025年4月光电信息、传感云、边缘计算、光学成像、物联网、智慧城市、新材料国际学术盛宴来袭!
人工智能·神经网络·物联网·算法·智慧城市·边缘计算
神里流~霜灭1 小时前
数据结构:二叉树(三)·(重点)
c语言·数据结构·c++·算法·二叉树·红黑树·完全二叉树
网安秘谈1 小时前
非对称加密技术深度解析:从数学基础到工程实践
算法
luckyme_1 小时前
leetcode-代码随想录-哈希表-有效的字母异位词
算法·leetcode·散列表
zh_xuan2 小时前
LeeCode 57. 插入区间
c语言·开发语言·数据结构·算法
莫有杯子的龙潭峡谷2 小时前
4.4 代码随想录第三十五天打卡
c++·算法
luckyme_2 小时前
leetcode 代码随想录 数组-区间和
c++·算法·leetcode
好好学习^按时吃饭2 小时前
蓝桥杯2024年第十五届省赛真题-R 格式
算法·蓝桥杯