测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A27739. 质因数国豪知道素数的多种判定方法,比如枚举该数的所有因数,再比如可以用埃氏筛和欧拉筛进行优化。国庆想考验下国豪对于素数的理解和应用能力。于是,他提了一个问题:给定一个合数 c,请国豪统计这个合数 c 的质因数个数、每个质因数及其出现的次数。输入共一行,一个正整数 c。输出若干行。第一行表示 c 的质因数的个数。接下来若干行,按照字典序给出 c 的每个质因数及其出现的次数。样例输入600样例输出3…

填空题 中等

题目描述

质因数

国豪知道素数的多种判定方法,比如枚举该数的所有因数,再比如可以用埃氏筛和欧拉筛进行优化。国庆想考验下国豪对于素数的理解和应用能力。于是,他提了一个问题:给定一个合数 c,请国豪统计这个合数 c 的质因数个数、每个质因数及其出现的次数。

输入

共一行,一个正整数 c。

输出

若干行。第一行表示 c 的质因数的个数。接下来若干行,按照字典序给出 c 的每个质因数及其出现的次数。

样例输入

600

样例输出

3

2 3

3 1 

5 2

说明

600=2^ 3 *3*5^ 2 ,600 有三个质因数,从小到大依次是 2,3,5,其中 2 出现了 3 次,3 出现了 1 次,5 出现了 2 次。

数据范围

4<=c<=2000000000

参考答案

#include<bits/stdc++.h> using namespace std; int n,k,a[101]; int main() {     int sum=0;     cin>>n;     for(int i=2;i<=n;i++)     {         while(n%i==0)         {             k++;             a[k]=i;             n/=i;         }       }     for(int i=1;i<=k-1;i++)     {         if(a[i]!=a[i+1])             sum++;     }     cout<<sum+1<<endl;     int c=1;     for(int i=1;i<=k;i++)     {         if(a[i]==a[i+1])             c++;         else         {             cout<<a[i]<<" "<<c<<endl;             c=1;         }     }     return 0; }
上一题 下一题