NKOJ P2404 【语法基础】分解质因数以及P2405 【语法基础】分解因数

【语法基础】分解质因数

  • 传统题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;
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值