Codeforces Round #326 (Div. 2)B.Duff in love

Codeforces Round #326 (Div. 2)B.Duff in love

http://codeforces.com/problemset/problem/588/B

简单数论

题目大意:给一个n,找出它的所有因数中的最大的lovely数 (lovely数指的是不能整除a^2,a>2)

我一开始比较愚蠢的想把所有的因数放一个数组里面,然后再从大到小一一判断。
然后光是数组就已经开不下了,就不往下想了。

12为什么不是lovely数呢?因为12%(2^2)=0
所以12中可以拆出两个2。
然后接下来再看3
12只能拆出一个3,故12%(3*3)!=0

拆来拆去,其实就是分解因子,并且特殊的是这个因子一定是素因子。
介绍一下唯一分解定理简单,虽然还没开始学数论,但是慢慢接触吧:在这里插入图片描述

所以这样一来,只要把每一个出现的素因子都乘一次就好了,仅仅一次,多的不要。

代码如下:

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<string>
#include<vector>
#include<stack>
#include<bitset>
#include<cstdlib>
#include<cmath>
#include<set>
#include<list>
#include<deque>
#include<map>
#include<queue>
#define LL long long
using namespace std;
int main()
{
    LL n,m=0;
    cin>>n;
    for (LL i=2; i<=sqrt(n); i++)
    {
        while(n%(i*i)==0)
        {
            n/=i;
        }
    }
    cout<<n<<endl;
    return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值