码迷,mamicode.com
首页 > 其他好文 > 详细

HDU 6623"Minimal Power of Prime"(数学)

时间:2019-10-20 17:36:31      阅读:77      评论:0      收藏:0      [点我收藏+]

标签:opened   const   block   tar   namespace   素数   def   ima   amp   

 

传送门

 

•题意

  给你一个大于 1 的正整数 n;

  它可以分解成不同的质因子的幂的乘积的形式,问这些质因子的幂中,最小的幂是多少。

•题解

  定义 $ans$ 表示最终答案;

  ①如果 $ans \ge 5$:

    那么,肯定有 $n=p^{ans}\ ,\ p \le \sqrt[{ans}]{n}$,也就是说 $\ p \le 10^{\frac{18}{5}}$;

  所以,我们可以提前预处理出 $[1,10000]$ 的素数表

•Code

技术图片
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define ll long long
 4 #define mem(a,b) memset(a,b,sizeof(a))
 5 const int N=1e4;
 6 
 7 ll n;
 8 int cnt;
 9 int prime[N];
10 bool isPrime[N+50];
11 
12 void Prime()
13 {
14     cnt=0;
15     mem(isPrime,true);
16     isPrime[1]=false;
17 
18     for(int i=2;i <= N;++i)
19     {
20         if(isPrime[i])
21             prime[++cnt]=i;
22 
23         int x;
24         for(int j=1;j <= cnt && (x=i*prime[j]) <= N;++j)
25         {
26             isPrime[x]=false;
27 
28             if(i%prime[j] == 0)
29                 break;
30         }
31     }
32 }
33 bool Calc(ll x)
34 {
35     int l=1,r=(int)1e6+1;
36     while(r-l > 1)
37     {
38         ll mid=l+((r-l)>>1);
39         if(mid*mid*mid > x)
40             r=mid;
41         else
42             l=mid;
43 
44         if(mid*mid*mid == x)
45             return true;
46     }
47     return false;
48 }
49 int Solve()
50 {
51     int ans=100;
52     for(int i=1;i <= cnt;++i)
53     {
54         int k=0;
55         while(n%prime[i] == 0)
56         {
57             k++;
58             n /= prime[i];
59         }
60         if(k)
61             ans=min(ans,k);
62 
63         if(n == 1 || ans == 1)
64             return ans;
65     }
66 
67     ll x=sqrt(sqrt(n));
68     ll y=sqrt(n);
69 
70     if(x*x*x*x == n)
71         ans=min(ans,4);
72     else if(y*y == n)
73         ans=min(ans,2);
74     else if(Calc(n))
75         ans=min(ans,3);
76     else
77         ans=1;
78 
79     return ans;
80 }
81 int main()
82 {
83     Prime();
84 
85     int T;
86     scanf("%d",&T);
87     while(T--)
88     {
89         scanf("%lld",&n);
90         printf("%d\n",Solve());
91     }
92     return 0;
93 }
View Code

 

HDU 6623"Minimal Power of Prime"(数学)

标签:opened   const   block   tar   namespace   素数   def   ima   amp   

原文地址:https://www.cnblogs.com/violet-acmer/p/11708166.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!