【语法基础】分解质因数
- 传统题500~1000ms64MiB
题目描述
给出n个整数,请分解出它们的质因数。
输入格式
第一行,一个整数n(n<=5000)
接下来n行,每行一个整数k(k<=2000,000,000,)
输出格式
n行,每行代表一个整数的质因数,数字间以空格做间隔,按由小到大排列
样例数据
输入数据 1
3
100
1235
123456
Copy
输出数据 1
2 5
5 13 19
2 3 643
Copy
提示
数论中的唯一分解定理:任意一个大于1的正整数,都可以唯一分解成若干质数相乘的形式。
例如:100=2\*2\*5\*5100=2\*2\*5\*5
1235=5\*13\*191235=5\*13\*19
123456=2\*2\*2\*2\*2\*2\*3\*643123456=2\*2\*2\*2\*2\*2\*3\*643
#include<iostream>
using namespace std;
void fen(int x)
{
for(int i=2;i*i<=x;i++)
{
if(x%i==0)
{
cout<<i<<" ";
while(x%i==0)
{
x/=i;
}
}
}
if(x!=1)
{
cout<<x<<" ";
}
return;
}
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
int k;
cin>>k;
fen(k);
cout<<endl;
}
return 0;
}
【语法基础】分解因数
- 传统题1000ms64MiB
题目描述
给出n个整数,分解出它们的因数。
输入格式
一个整数n(n<=100)
接下来n行,每行一个整数k(k<=2,000,000,000)
输出格式
n行,每行表示对应数字的因数,空格做间隔,按由小到大输出
样例数据
输入数据 1
2
100
1235
Copy
输出数据 1
1 2 4 5 10 20 25 50 100
1 5 13 19 65 95 247 1235
#include<iostream>
using namespace std;
int a[10000];
void yinshu(int x) {
int tot=1;
for(int i=1; i*i<=x; i++) {
if(x%i==0) {
cout<<i<<" ";
a[tot] = x/i;
tot++;
}
}
tot--;
for(int i=tot; i>=1; i--) {
if(a[i]*a[i] == x&&i==tot) {
continue;
}
cout<<a[i] <<" ";
}
return ;
}
int main() {
int n;
cin>>n;
for(int i=1; i<=n; i++) {
int k;
cin>>k;
yinshu(k);
cout<<endl;
}
return 0;
}
1万+

被折叠的 条评论
为什么被折叠?



