Duff in Love - 588B(素数的判断)
题目大意:如果一个数的所有因子都不是别的数的平方,那么这个数就是lovely数,现在给定一个数,求出这个数所有因子里面最大的lovely数
分析:很有意思的一道题,如果把这个数因子分解成最基本的苏因子,那么 N = p1 * p2 * p3 * .....,lovely数的因子不能有别的数的平方和,那么很明就是所有的素因子只取一个就行了,也就是所有的素数因子之积。
代码如下:
#include<iostream> #include<string.h> #include<stdio.h> #include<algorithm> #include<math.h> using namespace std; const int MAXN = 1e6+7; const int oo = 1e9+7; long long p[MAXN]={2}; bool Is_Prime(long long N) { for(int i=0; p[i]*p[i] <= N; i++) { if(N % p[i] == 0) return false; } return true; } int main() { long long i, N, cnt=1, ans=1, a; for(i=3; i<MAXN; i++) { if(Is_Prime(i) == true) p[cnt++] = i; } scanf("%lld", &N); for(i=0; p[i] <= N && i<cnt; i++) { if(N % p[i] == 0) { ans *= p[i]; while(N % p[i] == 0) N /= p[i]; } } printf("%lld\n", ans*N); return 0; }