zoukankan      html  css  js  c++  java
  • 试题 算法训练 素因子去重

    一.题目

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

    二.解决

    思路:用数组存储n的素因子,然后对数组去重,最后答案就是去重后的数组元素相乘。
    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    ll n,ans=1;
    ll a[110];
    int main(){
        cin>>n;
        ll i=2;
        int t=0;
        while(i*i<n){ //获得素因子 
            if(n%i==0) a[t++]=i;
            while(n%i==0){ //使用该数的因数对该数进行分解 
                n=n/i;
            }
            i++;
        }
        a[t++]=n;
        t=unique(a,a+t)-a;//数组去重后的数组元素个数 
        for(int i=0;i<t;i++){ //输出前t个元素,注意unique函数并没有删除重复数字,只是把重复数字放到后面而已 
            ans*=a[i];
        }
        cout<<ans<<endl;
    }
     
     
  • 相关阅读:
    DAY7-面向对象之封装
    Java遇到的问题、错误——持续更新
    008单例、继承、final
    java一些使用
    2.1端口扫描器
    PyCharm设置
    常用算法
    PyCharm最新2018激活码,最新方法
    004数组
    042多进程
  • 原文地址:https://www.cnblogs.com/Aiahtwo/p/12811355.html
Copyright © 2011-2022 走看看