洛谷 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;
}
相关推荐
十重幻想14 小时前
PTA6-1 使用函数求最大公约数(C)
c语言·数据结构·算法
大千AI助手15 小时前
蛙跳积分法:分子动力学模拟中的高效数值积分技术
算法·积分·数值积分·蛙跳积分法·牛顿力学系统·verlet积分算法
zycoder.15 小时前
力扣面试经典150题day3第五题(lc69),第六题(lc189)
算法·leetcode·面试
西阳未落17 小时前
LeetCode——双指针
c++·算法
胖咕噜的稞达鸭17 小时前
C++中的父继子承:继承方式实现栈及同名隐藏和函数重载的本质区别, 派生类的4个默认成员函数
java·c语言·开发语言·数据结构·c++·redis·算法
笑口常开xpr17 小时前
【C++】模板 - - - 泛型编程的魔法模具,一键生成各类代码
开发语言·数据结构·c++·算法
IT小番茄18 小时前
Kubernetes云平台管理实战:自动加载到负载均衡(七)
算法
笑口常开xpr18 小时前
【C++继承】深入浅出C++继承机制
开发语言·数据结构·c++·算法
让我们一起加油好吗19 小时前
【基础算法】DFS
算法·深度优先
爱学习的小鱼gogo21 小时前
python 矩阵中寻找就接近的目标值 (矩阵-中等)含源码(八)
开发语言·经验分享·python·算法·职场和发展·矩阵