洛谷 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;
}
相关推荐
椰萝Yerosius13 分钟前
[题解]2024CCPC郑州站——Z-order Curve
c++·算法
小曹要微笑16 分钟前
STM32F7 时钟树简讲(快速入门)
c语言·stm32·单片机·嵌入式硬件·算法
南山安25 分钟前
栈(Stack):从“弹夹”到算法面试题的进阶之路
javascript·算法·面试
2301_764441331 小时前
Python构建输入法应用
开发语言·python·算法
AI科技星1 小时前
为什么变化的电磁场才产生引力场?—— 统一场论揭示的时空动力学本质
数据结构·人工智能·经验分享·算法·计算机视觉
TheLegendMe2 小时前
贪心+线程安全单例
算法·哈希算法
豐儀麟阁贵3 小时前
8.5在方法中抛出异常
java·开发语言·前端·算法
胖咕噜的稞达鸭3 小时前
算法入门:滑动窗口--->找到字符串中所有的字母异位词,串联所有的子串,最小覆盖子串
数据库·redis·算法
小青龙emmm3 小时前
2025级C语言第二次周测(国教专用)题解
c语言·开发语言·算法
WolfGang0073214 小时前
代码随想录算法训练营Day28 | 509.斐波那契数列、70.爬楼梯、746.使用最小花费爬楼梯
算法