算法训练 素因子去重(给定一个正整数n,求一个正整数p,满足p仅包含n的所有素因子,且每个素因子的次数不大于1)

问题描述

给定一个正整数n,求一个正整数p,满足p仅包含n的所有素因子,且每个素因子的次数不大于1
输入格式
  一个整数,表示n
输出格式
  输出一行,包含一个整数p。
样例输入
1000
样例输出
10
数据规模和约定
  n<=10^12
  样例解释:n=1000=2^353,p=2*5=10

#include <stdio.h>

int main(){
    
    
	long long int n,p,i;
	scanf("%lld",&n);
	p=1;
	for(i=2;i<=n;i++){
    
    
		if(n%i==0){
    
    /*如果遇到因数*/
			p*=i;	
		}
		while(n%i==0){
    
    /*因数去重*/ 
			n/=i;
		}
	}
	printf("%d\n",p);
	return 0;
} 

运行示例
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_45281807/article/details/105781064