uva294(唯一分解定理)

题目链接:

唯一分解定理求约数。

 1 #include<cstdio>
 2 int L,R;
 3 int cnt;
 4 int pri[1010];
 5 int vis[1010];
 6 void is_pri()      //预处理素数表
 7 {
 8     cnt=0;
 9     for(int i=2;i<35;i++) if(!vis[i])
10         for(int j=i*i;j<1010;j+=i)
11             vis[j]=1;
12     for(int i=2;i<1010;i++) if(!vis[i])
13         pri[cnt++]=i;
14 }
15 
16 int divisor(int x)   //利用唯一分解定理
17 {
18     int r=1;
19     for(int i=0;i<cnt;i++)
20     {
21         int tmp=1;
22         while(x%pri[i]==0) {tmp++;x/=pri[i];}
23         r*=tmp;
24         if(x==1) break;
25     }
26     return r;
27 }
28 int main()
29 {
30     is_pri();
31     int t;
32     scanf("%d",&t);
33     while(t--)
34     {
35         int ans=-1;
36         int res;
37         scanf("%d%d",&L,&R);
38         for(int i=L;i<=R;i++)
39         {
40            int temp=divisor(i);
41            if(temp>ans)
42            {
43                ans=temp;
44                res=i;
45            }
46         }
47         printf("Between %d and %d, %d has a maximum of %d divisors.
",L,R,res,ans);
48 
49     }
50 }
原文地址:https://www.cnblogs.com/yijiull/p/6601229.html