CUGOJ 1682

经过一段时间的学习后,张同学发现小胡数学非常棒,于是决定追求数学成绩很好的女生小胡。小胡其实是想拒绝他的,但是小胡找不到好的说辞,于是提出了这样的要求:对于给定的两个正整数N和M,张同学随机选取一个N的因数Nf,小胡随机选取一个M的因数Mf,如果Nf和Mf相等,她就答应张同学。

小胡让张同学去编写一个随机程序,到时候她看过程序没有问题了就可以用来抽签了。但是张同学写着写着,却越来越觉得机会渺茫。那么问题来了,张同学能够追到小胡的几率是多少呢。

这一题比较简单,就是一个求解因子的过程。

假如我们知道了n和m的因子,那么最终的答案就是因子中相同的个数除以两个数因子的乘积。所以只要求出因子就可以了。

#include <cstdio>
#include <cstring>
#include <cmath>
#include <map>
#include <iostream>
#include <algorithm>

using namespace std;

int Gcd(int a, int b)
{
    if (b == 0)return a;
    return Gcd(b, a%b);
}

int main()
{
    int t;
    map<long long, int>map_1;
    long long n, m;
    cin >> t;
    while (t--)
    {
        map_1.clear();
        cin >> n >> m;
        if (n == m)
        {
            printf("1 1\n");
            continue;
        }
        int p = 0;
        int q = 0;
        for (int i = 1; i <= sqrt(n); i++)
        {
            if (n%i==0)
            {
                if (!map_1[i])map_1[i] = 1,p++;
                if (!map_1[n/i])map_1[n / i] = 1,p++;
            }
        }
        int ans = 0;
        for (int i = 1; i <= sqrt(m); i++)
        {
            if (m%i==0)
            {
                if (map_1[i])ans++;
                if (i!=m/i&&map_1[m / i])ans++;
                if(i!=m/i)q += 2;
                else q++;
            }
        }
        //cout << ans << " " << p << " " << q << endl;
        int a = Gcd(ans, p * q);
        printf("%d %d\n", (p * q) / a, ans / a);
    }
    return 0;
}
时间: 2024-08-28 06:31:55

CUGOJ 1682的相关文章

51nod 1682 中位数计数

1682 中位数计数基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 中位数定义为所有值从小到大排序后排在正中间的那个数,如果值有偶数个,通常取最中间的两个数值的平均数作为中位数. 现在有n个数,每个数都是独一无二的,求出每个数在多少个包含其的区间中是中位数. Input 第一行一个数n(n<=8000) 第二行n个数,0<=每个数<=10^9 Output N个数,依次表示第i个数在多少包含其的区间中是中位数. Input示例 5 1 2 3 4 5

1682: [Usaco2005 Mar]Out of Hay 干草危机

1682: [Usaco2005 Mar]Out of Hay 干草危机 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 391  Solved: 258[Submit][Status] Description The cows have run out of hay, a horrible event that must be remedied immediately. Bessie intends to visit the other farms

URAL 1682 Crazy Professor (并查集)

[题目链接] http://acm.timus.ru/problem.aspx?space=1&num=1682 [题目大意] 给出k,从1开始不断地加一并把这个数写在黑板上,如果写上的数字和之前的数字满足 (a+b*b)%k=0或者(b+a*a)%k=0就在他们之间连一条线,如果黑板上出现环就结束,问能写几个数 [题解] 我们发现写到2k-1的时候,就一定会产生一个环,所以我们只要枚举数字 往满足要求的地方连边,判断是否出现环即可 [代码] #include <cstdio> #in

51nod 1682 中位数计数(前缀和)

51nod 1682 中位数计数 思路: sum[i]表示到i为止的前缀和(比a[i]小的记为-1,相等的记为0,比a[i]大的记为1,然后求这些-1,0,1的前缀和): hash[sum[i]+N](由于sum[i]会小于0,所以要加N)记录在j<i的情况下sum[i]是否出现过,如果在j>=i的情况下,sum[i]还出现过,那么就代表有一个区间满足条件. 代码: #include<bits/stdc++.h> using namespace std; #define ll lo

mysql5.7报错 1546、1577和1682问题分析

环境说明:MySQL5.6.40 上xtrabackup全备备份的数据导入到mysql5.7.24实例上,启动MySQL5.7的服务,登录数据库MySQL5.7实例.但是在drop user [email protected]'127.0.0.1'时,报错如下: 2019-08-15T19:02:31.160910+08:00 1546 [ERROR] /usr/local/mysql5.7/bin/mysqld: Column count of mysql.user is wrong. Exp

ERROR 1682 (HY000): Native table &#39;performance_schema&#39;.&#39;session_variables&#39; has the wrong structure

mysql 5.6升级到mysql5.7查看参数报错 [email protected] [(none)]>show variables like '%data%'; ERROR 1682 (HY000): Native table 'performance_schema'.'session_variables' has the wrong structure --从mysql5.7.6开始information_schema.global_status已经开始被舍弃,为了兼容性,此时需要打开

acdream 1682(有环的最大连续和)

题意:有n个数字围成一个圈,然后从圆圈拿走连续的一些数,问拿走的数的和的最大值是多少. 题解:普通最大连续和的做法,如果前面累加的数加当前数是大于最大值就更新最大值,如果小于0就把累加值清零,这个是有环的,那么可以从两种情况考虑,一种是普通的最大连续和找到的最大值,另一种就是头尾拼接的,把所有数取相反数,然后找到最大连续和,那么用总和sum加这个数就是头尾拼接的最大值,取两种情况较大的就是解. #include <stdio.h> #include <algorithm> usin

acdream 1682 吃不完的糖果(环形最大子段和)

Problem Description 娜娜好不容易才在你的帮助下"跳"过了这个湖,果然车到山前必有路,大战之后必有回复,大难不死,必有后福!现在在娜娜面前的就是好多好多的糖果还有一些黑不溜秋的东西!不过娜娜眼中只有吃不完的糖果!娜娜高兴地快要蹦起来了! 这时有一位挥着翅膀的女孩(天使?鸟人?)飞过来,跟娜娜说,这些糖果是给你的~(娜娜已经两眼放光)~你可以带走~(娜娜已经流下了口水)~但是~(神马?还有但是?)~这位神仙姐姐挥一挥翅膀~飘过了一片云彩,糖果和那些黑不溜秋的东西顿时飞了

cogs 1682. [HAOI2014]贴海报 WW

★★☆   输入文件:ha14d.in   输出文件:ha14d.out   简单对比 时间限制:1 s   内存限制:256 MB [题目描述] Bytetown城市要进行市长竞选,所有的选民可以畅所欲言地对竞选市长的候选人发表言论.为了统一管理,城市委员会为选民准备了一个张贴海报的electoral墙. 张贴规则如下: 1.electoral墙是一个长度为N个单位的长方形,每个单位记为一个格子: 2.所有张贴的海报的高度必须与electoral墙的高度一致的: 3.每张海报以"A B&quo