ygg的分数运算

链接:https://ac.nowcoder.com/acm/contest/49343/D

ygg的分数运算

题目描述

\[给定两个数 a, b ( a, b 都是质数)。
问是否可以通过对分数
\frac{1}{a} , \frac{1}{b} ​
通过百亿次以内的加法乘法,使得结果的分母为c
\]

例如 a = 2, b = 3, c = 18

\[我们有 \frac{1}{2} + \frac{1}{3} = \frac{5}{6}
, \frac{5}{6} * \frac{1}{3} = \frac{5}{18} \]

输入描述:

\[三个数a,b,c,2\le a,b,c \le 10^9,2≤a,b,c≤10^9
(a,b都是质数)\]

输出描述:

\[如果可以,输出YES,否则输出NO
\]

分析:

作为菜鸡首先想到DFS,毫无疑问T了

点击查看代码
void dfs(int u)
{
    if (u > c || f)
    {
        return;
    }
    if (u == c)
    {
        f = true;
        return;
    }

    dfs(u * a);
    u /= a;
    dfs(u * b);
    u /= b;
}

换思路:
对于a,b:

  • a == b时,c 只能由 a 不断相乘获得
  • a != b时,c 只能由一些 a 与一些 b 相乘得到

考虑被约分的情况,都是质数约分后还是可以表示成一些 a 与一些 b 的乘积形式 qwq

#include <bits/stdc++.h>
using namespace std;
#define mst(x, y) memset(x, y, sizeof x)
#define endl '\n'
#define INF LONG_LONG_MAX
#define x first
#define y second
#define int long long
#define Lson u << 1, l, mid
#define Rson u << 1 | 1, mid + 1, r
#define FAST ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)
const int N = 200010, MOD = 1e9 + 7;
const double EPS = 1e-6;
typedef pair<int, int> PII;
typedef unordered_map<int, int> Ump;
int T;
int a, b, c;
bool f = false;
void solve()
{
    cin >> a >> b >> c;
    // dfs(1);
    while (c % a == 0)
        c /= a;
    while (c % b == 0)
        c /= b;
    if (c == 1)
        cout << "YES" << endl;
    else
        cout << "NO" << endl;
}
signed main()
{
    FAST;
    // cin >> T;
    T = 1;
    while (T--)
        solve();
    return 0;
}

原文链接: https://www.cnblogs.com/Aidan347/p/17022380.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    ygg的分数运算

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/309441

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月16日 上午11:02
下一篇 2023年2月16日 上午11:03

相关推荐