藍橋杯 素因子去重 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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章