Bootstrap

分解质因数(简单ac版本)

给定 n 个正整数 ai,将每个数分解质因数,并按照质因数从小到大的顺序输出每个质因数的底数和指数。

输入格式

第一行包含整数 n。

接下来 n行,每行包含一个正整数 ai。

输出格式

对于每个正整数 aiai,按照从小到大的顺序输出其分解质因数后,每个质因数的底数和指数,每个底数和指数占一行。

每个正整数的质因数全部输出完毕后,输出一个空行。

数据范围

1≤n≤100,
2≤ai≤2×10^9

输入样例
2
6
8
输出样例:
2 1
3 1

2 3

 思路:首先在遍历一个数值的时候先将它从2开始分解质因数,先把最先开始的质因数持续往下面分解,次数为指数,一个合数最后结束的分解的时候同时出去这些质因数,如果此时最后剩下的因数是质数的话直接输出即可,次数为1。

因为数据范围是大于2的,所以不用考虑1

#include<iostream>

using namespace std;

const int N=110;

int n;

//分解质因数

void fzs(int x)

{

        int cnt=0;
        for(int i=2;i<=x/i;i++)

 {

                if(x%i==0)//说明此时的数值是x的因数

        {        

                while(x%i==0)

                {

                        x=x/i;//每次用完要除以i值来计算i的指数,更新x值

                        cnt++;

                }

                cout<<i<<' '<<cnt<<endl;

        }

 }

if(x>1)cout<<x<<' '<<1<<endl;//   6/2=3 无法继续循环,且是质因数,直接输出这个值指数是1

puts(" ");//最后输出结束的时候输出一个空格

}

int main()

{

        cin>>n;

        while(n--)

        {
                int x;scanf("%d",&x);//注意这边的数据范围是超出了cin,所以必须得用scanf

                fzs(x);//调用分解质因数的函数
        
         }
        return 0;
}

;