文章
3
粉丝
0
获赞
17
访问
352
关键点:
当 n < 1e9 时并不会存在两个 大于 1e6 的质因数,因此 预先求 1e6 内的所有质因数,当某个合数可分解为一个 大于 1e6 的质因数,则剩余的质因数都必然小于 1e6 ,则可以被分解为质因数
(30行的含义)n == 1, 被完全分解了。 n > 1 且完全无法分解,那么是质数,也是返回1. n > 1 可以部分分解,剩余一个大于 1e6 的质因数则也是一样
#include <iostream>
#include <vector>
#include <math.h>
using namespace std;
const int MAX = 1e6 + 5;
int flag[MAX];// 0 素 1合.
int main(){
int n;
vector<int> prime;
for(int i = 2; i < MAX; i++){
if(flag[i] == 0){
prime.push_back(i);
for(int j = 2; i * j < MAX; j++){
flag[i * j] = 1;
}
}
}
while(cin >> n){
// 素数则直接输出1,合数则判断一下
int factorCount = 0;
int i = 0;
for(int i = 0; i < prime.size(); i++){
while(n % prime[i] == 0){
n /= prime[i];
factorCount++;
}
}
// n == 1, 被完全分解了。 n > 1 且完全无法分解,那么是质数,也是...
登录后发布评论
暂无评论,来抢沙发