多少个约数

简介: 多少个约数

问题描述


给定正整数 a, b, c,请问有多少个正整数,是其中至少两个数的约数。


输入格式


输入一行包含三个正整数 a, b, c。


输出格式


输出一行包含一个整数,表示答案。


样例输入


30 70 35


样例输出


6


样例说明


1、2、5、7、10、35满足条件。


评测用例规模与约定


对于 50% 的评测用例,1 <= a, b, c <= 1000000。

对于所有评测用例,a, b, c 不超过 10**12(10的12次方)。


大致思路


首先进行分解质因数,存入map中。然后利用容斥原理,可以得到如下表达式(Q a . . b 表示a…b的公约数数量)


image.png

可求出答案数。

#include <iostream>
#include <string>
#include <stack>
#include <vector>
#include <queue>
#include <map>
#include <set>
#include <algorithm>
#include <cmath>
typedef long long ll;
using namespace std;
int main() {
    ll a, b, c;
    cin >> a >> b >> c;
    map<ll, ll> sa, sb, sc;
    for (int i = 2; i <= a && a != 1; i++) {
        while (a % i == 0) {
            sa[i]++;
            a = a / i;
        }
    }
    for (int i = 2; i <= b && b != 1; i++) {
        while (b % i == 0) {
            sb[i]++;
            b = b / i;
        }
    }
    for (int i = 2; i <= c && c != 1; i++) {
        while (c % i == 0) {
            sc[i]++;
            c = c / i;
        }
    }
    ll cab = 0, cbc = 0, cac = 0, cabc = 0;
    for (map<ll, ll>::iterator it = sa.begin(); it != sa.end(); it++) {
        cab += min(it->second, sb[it->first]);
        cac += min(it->second, sc[it->first]);
        cabc += min(min(it->second, sc[it->first]), sb[it->first]);
    }
    for (map<ll, ll>::iterator it = sb.begin(); it != sb.end(); it++) {
        cbc += min(it->second, sc[it->first]);
    }
    cout << pow(2, cab) + pow(2, cac) + pow(2, cbc) - 2 * pow(2, cabc) << endl;
    return 0;
}
相关文章
《使用「Markdown」编辑器的那些天 |CSDN编辑器测评》
《使用「Markdown」编辑器的那些天 |CSDN编辑器测评》
166 0
|
JavaScript 前端开发 搜索推荐
不想要网页默认的右键菜单栏,怎么封装一个可以自定义的右键菜单组件?
不想要网页默认的右键菜单栏,怎么封装一个可以自定义的右键菜单组件?
289 0
|
安全 开发工具
VBA窗体最大化最小化按钮实现
VBA窗体最大化最小化按钮实现
641 0
|
算法 Java 数据处理
从HashSet到TreeSet,Java集合框架中的Set接口及其实现类以其“不重复性”要求,彻底改变了处理唯一性数据的方式。
从HashSet到TreeSet,Java集合框架中的Set接口及其实现类以其“不重复性”要求,彻底改变了处理唯一性数据的方式。HashSet基于哈希表实现,提供高效的元素操作;TreeSet则通过红黑树实现元素的自然排序,适合需要有序访问的场景。本文通过示例代码详细介绍了两者的特性和应用场景。
158 6
|
安全 Java API
为什么捕获异常后不要使用e.printStackTrace()打印日志
为什么捕获异常后不要使用e.printStackTrace()打印日志
|
安全 Ubuntu Linux
在Linux中,如何进行FTP服务器配置?
在Linux中,如何进行FTP服务器配置?
|
前端开发
【UI】 elementui的dialog弹窗打开时CSS的BUG | 滚动条消失bug
【UI】 elementui的dialog弹窗打开时CSS的BUG | 滚动条消失bug
485 0
|
资源调度 分布式计算 Hadoop
推荐一款数据同步工具:FlinkX
FlinkX是基于flink的分布式离线数据同步框架,实现了多种异构数据源之间高效的数据迁移
9794 0
|
前端开发 JavaScript Java
关于select框下设置了disabled导致前台有值,但后台接收不到的情况记录
在项目(传统JSP)需要改版页面的时候,进入页面前先获取后台传过来的数据,但一部分数据需要设置不可编辑,select框是不支持readonly的,故将select加disabled,此时则引起了一些问题,后台取不到加了disabled属性的值。
647 0
关于select框下设置了disabled导致前台有值,但后台接收不到的情况记录
|
前端开发 Java 关系型数据库
基于JAVA实现的仓库管理系统
基于JAVA实现的仓库管理系统
392 0