素因子去重(蓝桥杯练习题1)

题目链接

问题描述

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

输入格式

  一个整数,表示n

输出格式

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

样例输入

1000

样例输出

10

题意已经很明显了。

思路:这题主要考两个点。

1. 会对一个数进行分解

2. 能写出o(n)的素数递推表

所以先把数进行分解以后,在选出是素数的数,相乘就是答案。

注意:素数表需要打到1e7。这里解释一下原因,因为数据范围是1e12,我们分解数的范围是根号下n,也就是1e6,所以打表到1e7是最稳当的。

反思:为了做这个题,我又写了一篇介绍求素数表的博客。https://blog.csdn.net/qq_40774175/article/details/86693610

代码:

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;
typedef long long ll;
const int maxn=1e7+9;
int prime[maxn],total;
bool isprime[maxn];
void getPrime(int size)
{
    memset(isprime,1,sizeof(isprime));
    isprime[1]=false;
    for(int i=2;i ans;
    for(int i=2;i*i<=n;i++){
        if(n%i==0){
            while(n%i==0){
                n/=i;
            }
            ans.push_back(i);
        }
    }
    if(n>0){
        ans.push_back(n);
    }
    int ret=1;
    for(int t=0;t

蓝桥杯我报了java组,可我现在只想写c++....心态崩了

 

你可能感兴趣的:(ACM,常见问题,2020考研上机算法刷题)