站外题求助
查看原帖
站外题求助
1240580
Chinese_good_FaFa楼主2024/7/26 15:49

质因数

小明的老师在信息学课堂上讲了有关分解质因数的知识。例如12可以分解质因数:12=2×2×3,60=2×2×3×5等等。小明发现,有些数字分解出来的质因数的个数也是该数字的质因数,例如12分解出来的质因数有3个,3是12的质因数;60分解出来的质因数有4个,但4不是60的质因数。他觉得很有趣,想求出不大于n的所有这样的数字。你能帮帮他吗?

输入格式

一行,一个整数n。

输出格式

若干行,每行一个数,要求按照从小到大的顺序输出。

输入/输出例子1

输入:

12

输出:

4

6

10

12

样例解释

【样例说明】

样例1中,4可以分解2个质因数,2是4的质因数;6可以分解2个质因数,2是6的质因数;10可以分解2个质因数,2是10的质因数;12可以分解3个质因数,3是12的质因数。

【数据范围】

对于50%的数据,2≤n≤1000;

对于80%的数据,2≤n≤10000;

对于100%的数据,2≤n≤100000。

#include<bits/stdc++.h>
using namespace std;
vector<int> geshu(int n) {
    vector<int>sum(n + 1, 0);
    for (int i = 2; i <= n; i++) {
    	if(sum[i] == 0){
       		for (int j = i; j <= n; j += i) {
          	    int temp = j;
          	    while (temp % i == 0) {
          	        sum[j]++;
          	        temp /= i;
        	    }
        	}
    	}
    }

    return sum;
}
int main() {
    int n;
    cin>>n;
    vector<int> a=geshu(n);
    for(int i=1;i<=n;i++){
		if(a[i]>1&&a[i]==a[a[i]])cout<<i<<endl;
	}

    return 0;
}
2024/7/26 15:49
加载中...