蓝桥杯 素因子去重 C++算法训练 HERODING的蓝桥杯之路

资源限制
时间限制:1.0s 内存限制:256.0MB
问题描述
  给定一个正整数n,求一个正整数p,满足p仅包含n的所有素因子,且每个素因子的次数不大于1
输入格式
  一个整数,表示n
输出格式
  输出一行,包含一个整数p。
样例输入
1000
样例输出
10
数据规模和约定
  n<=10^12
  样例解释:n=1000=2^353,p=2*5=10

解题思路:
该题思路清晰,首先找出素因子,先对2取余数,如果余数为0,说明2是素因子,放入数组中,然后不断循环,重复的2经过判断不放入,2判断完毕后,判断3,5,7…直到平方数,当然还要考虑自身就是质数的情况,如果存在并且无重复放入到数组中,最后把数组中的所有数相乘即为所求结果。代码如下:

#include<bits/stdc++.h>

using namespace std;

int index = 0;

int a[100];

bool judge(int num){
	for (int i = 0; i < index; i ++){
		if(a[i] == num){
			return false;
		}
	}
	return true;
}

int main(){
	long long n;
	cin >> n;
	while (n % 2 == 0) {
		if(judge(2)){
			a[index ++] = 2;
		}
		n /= 2;
	} 
	for(int i = 3;i <= sqrt(n*1.0);i += 2){
		while(n % i == 0){
		if(judge(i)){
			a[index ++] = i;
		}
			n /= i;
		}
	}
	if(n > 2){
	if(judge(n)){
			a[index ++] = n;
		}	
	}
	int sum = 1;
	for (int i = 0; i < index; i ++){
		sum *= a[i];
	}
	cout << sum;
	return 0;
}

猜你喜欢

转载自blog.csdn.net/HERODING23/article/details/106504141