题意:
一个数x被定义为lovely number需要满足这样的条件:不存在一个数a(a>1),使得a的完全平方是x的因子(即x % a2 != 0)。
给你一个数n,求出n的因子中为lovely number的最大因子。
思路:
由于1<=n<=0=109,所以我们只要从1到找sqrt(n)就好,然后先从最大因子开始判断是否满足lovely number的条件,当满足时直接出输出即可.
代码如下:
1 #include <iostream>
2 #include <cstdio>
3 #include <cstring>
4 #include <fstream>
5 #include <ctime>
6 #include <cmath>
7 #include <cstdlib>
8 #include <algorithm>
9 #include <set>
10 #include <map>
11 #include <list>
12 #include <stack>
13 #include <queue>
14 #include <iterator>
15 #include <vector>
16
17 using namespace std;
18 #define LL long long
19 #define INF 0x3f3f3f3f
20 #define MOD 1000000007
21 #define MAXN 10000010
22 #define MAXM 1000010
23
24 int fun(LL x)
25 {
26 LL i;
27 for(i = 2; i*i <= x; i++ )
28 if(x%(i*i)==0)
29 return 0;
30 return 1;
31 }
32
33
34 int main()
35 {
36 int flag;
37 LL n, m, i, j, ans;
38 while(scanf("%lld", &n)==1)
39 {
40 flag = 0;
41 m = sqrt(n+0.5)+1;
42 for(i = 1; i <= m; i++ )
43 {
44 LL k = n/i;
45 if(n%i==0&&fun(k))
46 {
47 flag = 1;
48 ans = k;
49 break;
50 }
51 }
52 if(!flag)
53 for(i = m; i >= 1; i--)
54 {
55 if(n%i==0&&fun(i))
56 {
57 ans = i;
58 break;
59 }
60 }
61 printf("%lld
", ans);
62 }
63
64 return 0;
65 }