洛谷 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;
}
相关推荐
粉色挖掘机3 小时前
矩阵在密码学的应用——希尔密码详解
线性代数·算法·机器学习·密码学
七七七七074 小时前
【计算机网络】UDP协议深度解析:从报文结构到可靠性设计
服务器·网络·网络协议·计算机网络·算法·udp
TitosZhang4 小时前
排序算法稳定性判断
数据结构·算法·排序算法
一种乐趣5 小时前
PHP推荐权重算法以及分页
算法·php·推荐算法
ccLianLian5 小时前
计算机视觉·TagCLIP
人工智能·算法
千弥霜5 小时前
codeforces1997(div.3)E F
算法
利刃大大6 小时前
【动态规划:01背包】01背包详解 && 模板题 && 优化
c++·算法·动态规划·力扣·背包问题
im_AMBER6 小时前
算法笔记 10
笔记·学习·算法·leetcode
workflower6 小时前
FDD与其他方法的相似和区别
数据库·算法·需求分析·个人开发
电鱼智能的电小鱼11 小时前
基于电鱼 AI 工控机的智慧工地视频智能分析方案——边缘端AI检测,实现无人值守下的实时安全预警
网络·人工智能·嵌入式硬件·算法·安全·音视频