Count the Values of k

2024-04-18 20:44
文章标签 values count

本文主要是介绍Count the Values of k,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

题目总览

思路

参考代码

原题链接: CF1933C Turtle Fingers: Count the Values of k


题目总览

# Turtle Fingers: Count the Values of k

## 题面翻译

给你三个**正**整数 $a$ 、 $b$ 和 $l$ ( $a,b,l>0$ )。

可以证明,总有一种方法可以选择**非负**(即 $\ge 0$ )的整数 $k$ 、 $x$ 和 $y$ ,使得 $l = k \cdot a^x \cdot b^y$ .

你的任务是找出所有这些方法中 $k$ 的不同可能值的个数。

**输入**

第一行包含整数 $t$ ( $1 \le t \le 10^4$ ) 

接下来的 $t$ 行包含三个整数 $a$ 、 $b$ 和 $l$ ( $2 \le a, b \le 100$ 、 $1 \le l \le 10^6$ )

**注**

在第一个测试案例中, $a=2, b=5, l=20$ . $k$ (及相应的 $x,y$ )的可能值如下:

- 选择 $k = 1, x = 2, y = 1$ 。然后选择 $k \cdot a^x \cdot b^y = 1 \cdot 2^2 \cdot 5^1 = 20 = l$ 。
- 选择 $k = 2, x = 1, y = 1$ 。然后是 $k \cdot a^x \cdot b^y = 2 \cdot 2^1 \cdot 5^1 = 20 = l$ 。
- 选择 $k = 4, x = 0, y = 1$ 。然后选择 $k \cdot a^x \cdot b^y = 4 \cdot 2^0 \cdot 5^1 = 20 = l$ 。
- 选择 $k = 5, x = 2, y = 0$ 。然后选择 $k \cdot a^x \cdot b^y = 5 \cdot 2^2 \cdot 5^0 = 20 = l$ 。
- 选择 $k = 10, x = 1, y = 0$ 。然后选择 $k \cdot a^x \cdot b^y = 10 \cdot 2^1 \cdot 5^0 = 20 = l$ 。
- 选择 $k = 20, x = 0, y = 0$ 。然后选择 $k \cdot a^x \cdot b^y = 20 \cdot 2^0 \cdot 5^0 = 20 = l$ 。

在第二个测试案例中,选择 $a=2, b=5, l=21$ 。注意 $l = 21$ 不能被 $a = 2$ 或 $b = 5$ 整除。因此,我们只能设置 $x = 0, y = 0$ ,即对应于 $k = 21$ 。

第三个测试情形是 $a=4, b=6, l=48$ 。 $k$ 的可能值(以及相应的 $x,y$ )是(和对应的 $x,y$ 的可能值如下:

- 选择 $k = 2, x = 1, y = 1$ 。然后选择 $k \cdot a^x \cdot b^y = 2 \cdot 4^1 \cdot 6^1 = 48 = l$ 。
- 选择 $k = 3, x = 2, y = 0$ 。然后是 $k \cdot a^x \cdot b^y = 3 \cdot 4^2 \cdot 6^0 = 48 = l$ 。
- 选择 $k = 8, x = 0, y = 1$ 。然后选择 $k \cdot a^x \cdot b^y = 8 \cdot 4^0 \cdot 6^1 = 48 = l$ 。
- 选择 $k = 12, x = 1, y = 0$ 。然后选择 $k \cdot a^x \cdot b^y = 12 \cdot 4^1 \cdot 6^0 = 48 = l$ 。
- 选择 $k = 48, x = 0, y = 0$ 。然后选择 $k \cdot a^x \cdot b^y = 48 \cdot 4^0 \cdot 6^0 = 48 = l$ 。

## 题目描述

You are given three positive integers $ a $ , $ b $ and $ l $ ( $ a,b,l>0 $ ).

It can be shown that there always exists a way to choose non-negative (i.e. $ \ge 0 $ ) integers $ k $ , $ x $ , and $ y $ such that $ l = k \cdot a^x \cdot b^y $ .

Your task is to find the number of distinct possible values of $ k $ across all such ways.

## 输入格式

The first line contains the integer $ t $ ( $ 1 \le t \le 10^4 $ ) — the number of test cases.

The following $ t $ lines contain three integers, $ a $ , $ b $ and $ l $ ( $ 2 \le a, b \le 100 $ , $ 1 \le l \le 10^6 $ ) — description of a test case.

## 输出格式

Output $ t $ lines, with the $ i $ -th ( $ 1 \le i \le t $ ) line containing an integer, the answer to the $ i $ -th test case.

## 样例 #1

### 样例输入 #1

```

11
2 5 20
2 5 21
4 6 48
2 3 72
3 5 75
2 2 1024
3 7 83349
100 100 1000000
7 3 2
2 6 6
17 3 632043


```

### 样例输出 #1

```

6
1
5
12
6
11
24
4
1
3
24


```

## 提示

In the first test case, $ a=2, b=5, l=20 $ . The possible values of $ k $ (and corresponding $ x,y $ ) are as follows:

- Choose $ k = 1, x = 2, y = 1 $ . Then $ k \cdot a^x \cdot b^y = 1 \cdot 2^2 \cdot 5^1 = 20 = l $ .
- Choose $ k = 2, x = 1, y = 1 $ . Then $ k \cdot a^x \cdot b^y = 2 \cdot 2^1 \cdot 5^1 = 20 = l $ .
- Choose $ k = 4, x = 0, y = 1 $ . Then $ k \cdot a^x \cdot b^y = 4 \cdot 2^0 \cdot 5^1 = 20 = l $ .
- Choose $ k = 5, x = 2, y = 0 $ . Then $ k \cdot a^x \cdot b^y = 5 \cdot 2^2 \cdot 5^0 = 20 = l $ .
- Choose $ k = 10, x = 1, y = 0 $ . Then $ k \cdot a^x \cdot b^y = 10 \cdot 2^1 \cdot 5^0 = 20 = l $ .
- Choose $ k = 20, x = 0, y = 0 $ . Then $ k \cdot a^x \cdot b^y = 20 \cdot 2^0 \cdot 5^0 = 20 = l $ .

In the second test case, $ a=2, b=5, l=21 $ . Note that $ l = 21 $ is not divisible by either $ a = 2 $ or $ b = 5 $ . Therefore, we can only set $ x = 0, y = 0 $ , which corresponds to $ k = 21 $ .

In the third test case, $ a=4, b=6, l=48 $ . The possible values of $ k $ (and corresponding $ x,y $ ) are as follows:

- Choose $ k = 2, x = 1, y = 1 $ . Then $ k \cdot a^x \cdot b^y = 2 \cdot 4^1 \cdot 6^1 = 48 = l $ .
- Choose $ k = 3, x = 2, y = 0 $ . Then $ k \cdot a^x \cdot b^y = 3 \cdot 4^2 \cdot 6^0 = 48 = l $ .
- Choose $ k = 8, x = 0, y = 1 $ . Then $ k \cdot a^x \cdot b^y = 8 \cdot 4^0 \cdot 6^1 = 48 = l $ .
- Choose $ k = 12, x = 1, y = 0 $ . Then $ k \cdot a^x \cdot b^y = 12 \cdot 4^1 \cdot 6^0 = 48 = l $ .
- Choose $ k = 48, x = 0, y = 0 $ . Then $ k \cdot a^x \cdot b^y = 48 \cdot 4^0 \cdot 6^0 = 48 = l $ .

思路

这道题 a 和 b 都很小,而 l 却很大。

所以枚举 x 和 y,计算 k 就可以了。

参考代码

#include <bits/stdc++.h>
#define ll long long
using namespace std;//const int N = ;int main()
{ios::sync_with_stdio(0);cin.tie(0);int t;cin>>t;while(t--){set <ll> ans;ll a, b, l;cin>>a>>b>>l;for(ll i = 1, a_x = 1; a_x <= l; i++, a_x *= a){for(ll j = 1, b_y = 1; b_y <= l; j++, b_y *= b){ll k = l / (a_x * b_y);if(k * a_x * b_y == l)ans.insert(k);}	}cout<<ans.size()<<"\n";}return 0;
}

原题链接:CF1933C Turtle Fingers: Count the Values of k


喜欢文章的可以点个关注+收藏,或者顺手一个小心心也可以,最近刷题较多,博文发的很频繁,制作不易,不喜勿喷(全文约 3.4K 字不值得你你的关注吗?)

这篇关于Count the Values of k的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/915800

相关文章

leetcode#38. Count and Say

The count-and-say sequence is the sequence of integers with the first five terms as following: 1. 12. 113. 214. 12115. 111221 1 is read off as “one 1” or 11. 11 is read off

《Learning To Count Everything》CVPR2021

摘要 论文提出了一种新的方法来解决视觉计数问题,即在给定类别中仅有少量标注实例的情况下,对任何类别的对象进行计数。将计数问题视为一个少样本回归任务,并提出了一种新颖的方法,该方法通过查询图像和查询图像中的少量示例对象来预测图像中所有感兴趣对象的存在密度图。此外,还提出了一种新颖的适应策略,使网络能够在测试时仅使用新类别中的少量示例对象来适应任何新的视觉类别。为了支持这一任务,作者还引入了一个包含

class _ContiguousArrayStorage deallocated with non-zero retain count

Xcode报错 : Object 0x11c614000 of class _ContiguousArrayStorage deallocated with non-zero retain count 2. This object's deinit, or something called from it, may have created a strong reference to self w

LeetCode - 38. Count and Say

38. Count and Say  Problem's Link  ---------------------------------------------------------------------------- Mean:  题目意思太晦涩。 1 读出来 就是“1个1” 所以记为“11” 11 读出来 就是“2个1” 所以记为“21” 21 读出来 就是“1个

【FZU】2105 Digits Count 线段树

传送门:【FZU】2105 Digits Count 题目分析:与、或、异或三种操作都是每一位相互独立的,所以可以将线段树建四棵,分别对应一位,and和or操作相当于覆盖操作,xor操作相当于反转操作,就和普通的线段树方法类似,设立两个lazy标记即可。查询的时候求得每一位的1的个数*权重(1,2,4,8),全部累加就是答案。 代码如下: #include <cst

Page directive: illegal to have multiple occurrences of contentType with different values (x,X)之解

Question: Page directive: illegal to have multiple occurrences of contentType with different values (old: text/html; charset=utf-8, new: text/html;charset=UTF-8) Analysis: 出现这个的原因是这两个jsp的contentT

CodeForces 451D Count Good Substrings

题意: 一个只包含a和b的字符串  问  它有几个长度为偶数和长度为奇数的“压缩回文串”  压缩的概念是  相邻的相同字符压缩成一个字符 思路: 串经过压缩一定满足如下形式 ……ababab……  那么这样只要两端的字符相同则中间一定是回文的  因此对于一个a它作为左端点形成的回文串个数就等于它右边的a的个数  那么长度是奇数还是偶数呢  可以这么判断  如果a在奇数位置上和它匹配的a也在奇

Count Palindrome in String

string 有多少palindrome substring。exp: 'aba' 返回4 , 'abba' 返回6 public class CountPalindrome {public int countPalindrome(String str){if(str == null || str.length() == 0) return 0;int count = 0;for(int

用 count(*)哪个存储引擎会更快?

InnoDB 引擎执行 count 函数的时候,需要通过遍历的方式来统计记录个数,而 MyISAM 引擎执行 count 函数只需要 0(1 )复杂度,这是因为每张 MyISAM 的数据表都有一个 meta 信息有存储了row_count值,由表级锁保证一致性,所以直接读取row_count 值就是 count 函数的执行结果 而 InnoDB 存储引擎是支持事务的,同一个时刻的多个查询,由

c++ unordered_set的count方法

在 C++ 的 std::unordered_set 中,count 方法用于返回集合中与指定值相等的元素的数量。由于 unordered_set 的特性是只允许唯一元素,因此对于任何给定元素,count 方法的返回值只能是 0 或 1。 语法 size_t count(const Key& key) const; key: 要查找的元素。返回值: 如果集合中存在这个元素,返回 1;如果不