URAL 1355. Bald Spot Revisited(数论)

题目链接

题意 : 一个学生梦到自己在一条有很多酒吧的街上散步。他可以在每个酒吧喝一杯酒。所有的酒吧有一个正整数编号,这个人可以从n号酒吧走到编号能整除n的酒吧。现在他要从a号酒吧走到b号,请问最多能喝到多少酒。

思路 :因为b肯定要是a的倍数,是a从头开始乘下去的,实际上就是找构成b/a的素数划分,有多少个素数划分就可以喝到多少的酒。

 1 #include <stdio.h>

 2 #include <string.h>

 3 #include <iostream>

 4 

 5 using namespace std ;

 6 

 7 int sumnum(int n)

 8 {

 9     for(int i = 2 ; i * i <= n ; i++)//素数

10     {

11         if(n % i == 0){//为0就说明多了一个,然后剩下的数接着找

12             return 1 + sumnum(n / i) ;

13         }

14     }

15     return 0 ;

16 }

17 int main()

18 {

19     int T ;

20     scanf("%d",&T) ;

21     int a,b ;

22     while(T--)

23     {

24         scanf("%d %d",&a,&b) ;

25         if(b % a != 0)

26         {

27             printf("0\n") ;

28             continue ;

29         }

30         else if(a == b)

31         {

32             printf("1\n") ;

33             continue ;

34         }

35         int ans = sumnum(b / a);

36         printf("%d\n",ans+2) ;//加上a和b

37     }

38     return 0 ;

39 }
View Code

 

你可能感兴趣的:(vi)