ural 1355

题目:http://acm.timus.ru/problem.aspx?space=1&num=1355

题意:给出两个数 a b,从a 可以走的编号是 b 的因子,每走一个编号就可以喝一杯酒,问从 a 到 b 可以喝到最多的酒是多少(大概是这个意思)

思路:如果从a 到不了 b(即 b % a 不为零) 那么 ans = 0;如果可以走到,那么计算 b / a 后的素因子的个数

View Code
 1 typedef long long ll;
 2 const int N = 32000;
 3 int prime[N];
 4 bool vis[N];
 5 int num;
 6 void is_prime()
 7 {
 8     int i,j;
 9     for(i = 2; i < N; i++)
10     if(!vis[i])
11     {
12         prime[num ++] = i;
13         for(j = 2; j * i < N; j++)
14         {
15             if(vis[i * j]) continue;
16             vis[i * j] = true;
17         }
18     }
19 }
20 int main()
21 {
22     num = 0;
23     is_prime();
24     int t;
25     int i,j;
26     int a,b;
27     //freopen("data.txt","r",stdin);
28     scanf("%d",&t);
29     while(t--)
30     {
31         scanf("%d%d",&a,&b);
32         if(b % a) {printf("0\n");continue;}
33         int tem = sqrt(b * 1.0);
34         b /= a;
35         int ans = 1;
36         for(i = 0; i < num && i <= tem; i++)
37         {
38             while(b % prime[i] == 0)
39             {
40                 ans ++;
41                 b /= prime[i];
42             }
43         }
44         if(b != 1) ans ++;
45         printf("%d\n",ans);
46     }
47     return 0;
48 }
原文地址:https://www.cnblogs.com/fxh19911107/p/2682454.html