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;
}
本文解析了Codeforces Round #326 (Div.2) B题Duff in love,介绍了Lovely数的概念及如何通过分解因子算法高效求解Lovely数。Lovely数是指不能被任何大于2的数的平方整除的数。
704

被折叠的 条评论
为什么被折叠?



