URAL 1355. Bald Spot Revisited(数论)

时间:2023-03-09 06:45:36
URAL 1355. Bald Spot Revisited(数论)

题目链接

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

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

 #include <stdio.h>
#include <string.h>
#include <iostream> using namespace std ; int sumnum(int n)
{
for(int i = ; i * i <= n ; i++)//素数
{
if(n % i == ){//为0就说明多了一个,然后剩下的数接着找
return + sumnum(n / i) ;
}
}
return ;
}
int main()
{
int T ;
scanf("%d",&T) ;
int a,b ;
while(T--)
{
scanf("%d %d",&a,&b) ;
if(b % a != )
{
printf("0\n") ;
continue ;
}
else if(a == b)
{
printf("1\n") ;
continue ;
}
int ans = sumnum(b / a);
printf("%d\n",ans+) ;//加上a和b
}
return ;
}