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

    问题描述

    给定一个正整数n,求一个正整数p,满足p仅包含n的所有素因子,且每个素因子的次数不大于1

    输入格式

    一个整数,表示n

    输出格式

    输出一行,包含一个整数p。

    样例输入

    1000

    样例输出

    10

    数据规模和约定

    n<=1012

    样例解释:n=1000=2353,p=25=10

    分析

    对n分解质因数,应该找到一个最小的质数k,然后按下述步骤完成:
    1.如果这个质数恰等于n,则说明分解质因数的过程已结束,打印出即可;
    2.如果n!=k,但n能被k整除,则打印出k的值,并用n除以k的商,作为新的正整数n,重复执行第一步;
    2.如果n不能被k整除,则用k+1作为k的值,重复执行第一步。

    将求出的质因子放到一个数组中保存,数组下标表示该质因子,数组的值为0或1,为1表示有该质因子,最后读取该数组的值,将为1的元素下标相乘。

    代码

    #include <iostream>
    using namespace std;
    bool num[4000000];
    int main()
    {
        int k=2;
        long long n,ans=1;
        cin>>n;
        if (n==2)
        {
            cout<<n;
            return 0;
        }
        while (k<=n)
        {
            if (k==n)
            {
                num[k]=true;
                break;
            }
            else if (n%k==0)
            {
                num[k]=true;
                n=n/k;
            }
            else k++;
        }
        for (int i = 2; i <= n; ++i)
            if (num[i]) ans*=i;
        cout<<ans<<endl;
        return 0;
    }
    
  • 相关阅读:
    今天英语有何新收获?
    今天了解了解了外包这一行业
    今天英语有何新收获?
    sicp 练习1.7
    今天英语有何新收获
    今天英语有何新收获?
    反射(初尝)
    初学正则表达式
    sicp 练习1.8 【有点疑惑】
    [tip]Windows filename MAX_PATH limitation
  • 原文地址:https://www.cnblogs.com/AlexKing007/p/12338429.html
Copyright © 2011-2022 走看看