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 }

时间: 2024-10-25 06:57:29

URAL 1355. Bald Spot Revisited(数论)的相关文章

TimusOJ Bald Spot Revisited(质因数分解)

题目链接http://acm.timus.ru/problem.aspx?space=1&num=1355 莫名其妙地AC了的代码 #include<cstdio> using namespace std; const int N=50001; bool b[N]; int p[N],pnum,t,aa,bb; void shai(const int &MAX){ for (int i=2; i<MAX; i++){ if (!b[i]) p[pnum++]=i; for

URAL 1934 Black Spot --- 简单最短路变形

边权为1,在维护最短路的同时维护p值最小,我直接存的(1-p),即不遇见的概率,要使得这个值最大. #include <iostream> #include <cstdlib> #include <cstring> #include <string> #include <cstdio> #include <cmath> #include <algorithm> #include <vector> #includ

URAL 1139. City Blocks (数论)

1139. City Blocks Time limit: 1.0 second Memory limit: 64 MB The blocks in the city of Fishburg are of square form. N avenues running south to north and M streets running east to west bound them. A helicopter took off in the most southwestern crossro

URAL 1104 Don’t Ask Woman about Her Age(数论)

题目链接 题意 : 给你一个数,未知进制,然后让你从2到36进制中找出一个最小的进制K,满足给你的这个数作为k进制时能够整除k-1. 思路 : 有一个公式,(a*b^n)mod(b-1)=a: 给定你这个数,当做字符串输入的时候,这个数转化成10进制的结果应该是:a[0]*k^(n-1)+a[1]*k^(n-2)+……+a[n-1]*k^0,然后题目要求的就是这个式子的结果取余(k-1)为0, 经过最开始给出的公式,将该式子化简得(a[0]+a[1]+……+a[n-1])%(k-1),所以只要满

URAL 1907. Coffee and Buns(数论推导+容斥原理)

1907. Coffee and Buns Time limit: 1.0 second Memory limit: 64 MB Planet Ataraxia is known for its education centers. The people who are expected to take high social positions in future are brought up in conditions of continuous training and supervisi

URAL 1430. Crime and Punishment(数论)

题目链接 题意 :给你a,b,n,让你找出两个数x,y,使得n-(a*x+b*y)最小. 思路 : 分大小做,然后枚举a的倍数 1 #include <stdio.h> 2 #include <string.h> 3 #include <iostream> 4 #define LL __int64 5 6 using namespace std ; 7 8 int main() 9 { 10 LL a,b,n ; 11 while(~scanf("%I64d

URAL 1133 Fibonacci Sequence(数论)

题目链接 题意 :给你第 i 项的值fi,第 j 项的值是 fj 让你求第n项的值,这个数列满足斐波那契的性质,每一项的值是前两项的值得和. 思路 :知道了第 i 项第j项,而且还知道了每个数的范围,二分求第 i+1项,然后根据性质求下去,求到第 j 项的时候看看通过二分求出来的值与给定的第j项的值大小关系,来确定下一次二分的值,输出的时候注意方向. #include <stdio.h> #include <string.h> #include <iostream> #

ural 2003. Simple Magic 数论 因数分解

2003. Simple Magic Time limit: 1.0 second Memory limit: 64 MB Do you think that magic is simple? That some hand-waving and muttering incomprehensible blubber is enough to conjure wonderful gardens or a fireball to burn your enemies to ashes? The real

数论(数论题)

数论 Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Status Practice URAL 1095 Description 给出一个数N,含有数字1,2,3,4.把N的所有位数重新排列一下组成一个新数,使得它是7的倍数. Input 第一行测试数据的总数T(T<=10000). 接下来T行每行一个整数N,N不超过20位. Output 如果存在这样的排列则随便输出一个