首页 > 代码库 > URAL 1355. Bald Spot Revisited(数论)

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和b37     }38     return 0 ;39 }
View Code

 

URAL 1355. Bald Spot Revisited(数论)