约数个数(c++, java)

简介: 约数个数(c++, java)

约数个数

给定 n 个正整数 ai,请你输出这些数的乘积的约数个数,答案对 109+7

取模

输入格式

第一行包含整数 n。

接下来 n 行,每行包含一个整数 ai。

输出格式

输出一个整数,表示所给正整数的乘积的约数个数,答案需对 109+7取模。

数据范围

1≤n≤100,

1≤ai≤2×109

输入样例:

3
2
6
8

输出样例:

12

算法思路

主要是需要知道公式

提交代码

C++

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int mod = 1e9 + 7;
int main()
{
    int n;
    cin >> n;
    unordered_map<int, int> m;
    while(n --)
    {
        int t;
        cin >> t;
        for (int i = 2; i <= t / i; ++ i)
        {
            while(t % i == 0)
            {
                t /= i, m[i] ++;
            }
        }
        if (t > 1) m[t] ++;
    }
    LL res = 1;
    for (auto x : m) res = res * (x.second + 1) % mod;
    cout << res << endl;
    return 0;
}

Java

import java.util.*;
import java.io.*;
public class Main
{
    public static void main(String [] args) throws IOException
    {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(reader.readLine());
        Map<Integer, Integer> m = new HashMap<Integer, Integer>();
        // m中存储的是乘积质因分解之后的所有质数,和其对应的个数
        while(n -- > 0)
        {
            int cur = Integer.parseInt(reader.readLine());
            for (int i = 2; i <= cur / i; ++ i)
            {
                int cnt = 0;
                while(cur % i == 0) // 对每一个数进行质因分解
                {
                    cnt ++;
                    cur /= i;
                }
                m.put(i, m.getOrDefault(i, 0) + cnt);
            }
            if (cur > 1) m.put(cur, m.getOrDefault(cur, 0) + 1); // 如果最后这个数没有成为1 那么代表这个数剩下的部也是也给质数
            // 也算一个
        }
        long res = 1l;
        // 这里就是公式的应用
        for (Integer cur : m.keySet()) res = res * (m.get(cur) + 1) % ((int)1e9 + 7);
        System.out.println(res);
    }
}


相关文章
|
4月前
|
jenkins Shell 测试技术
|
4月前
|
安全 jenkins Java
Java、Python、C++支持jenkins和SonarQube(一)
Jenkins 是一个开源的 持续集成(CI)和持续交付(CD) 工具,用于自动化构建、测试和部署软件项目。它基于 Java 开发,支持跨平台运行,并拥有丰富的插件生态系统,可以灵活地扩展功能
323 5
|
4月前
|
jenkins Java Shell
Java、Python、C++支持jenkins和SonarQube(全集)
Jenkins 是一个开源的持续集成(CI)和持续交付(CD)工具,用于自动化构建、测试和部署软件项目。它基于 Java 开发,支持跨平台运行,并拥有丰富的插件生态系统,可以灵活地扩展功能
462 1
|
4月前
|
jenkins Java 持续交付
Java、Python、C++支持Jenkins和SonarQube(三)
Python与Jenkins和SonarQube
153 1
|
4月前
|
jenkins Java 测试技术
|
7月前
|
算法 Java 数据库连接
Java 与 C++ 区别深入剖析及应用实例详解
本文深入剖析了Java和C++两种编程语言的区别,从编译与执行机制、面向对象特性、数据类型与变量、内存管理、异常处理等方面进行对比,并结合游戏开发、企业级应用开发、操作系统与嵌入式开发等实际场景分析其特点。Java以跨平台性强、自动内存管理著称,适合企业级应用;C++则因高性能和对硬件的直接访问能力,在游戏引擎和嵌入式系统中占据优势。开发者可根据项目需求选择合适语言,提升开发效率与软件质量。附面试资料链接:[点此获取](https://pan.quark.cn/s/4459235fee85)。
713 0
|
Java Android开发 C++
Java和C++
Java和C++
250 15
|
IDE Java 程序员
C++ 程序员的 Java 指南
一个 C++ 程序员自己总结的 Java 学习中应该注意的点。
142 5
WK
|
安全 Java 编译器
C++和Java哪个更好用
C++和Java各具优势,选择取决于项目需求、开发者偏好及目标平台特性。C++性能出色,适合游戏、实时系统等;Java平台独立性强,适合跨平台、安全敏感应用。C++提供硬件访问和灵活编程范式,Java有自动内存管理和丰富库支持。两者各有千秋,需根据具体需求选择。
WK
418 1
|
缓存 并行计算 Java
C++矢量运算与java矢量运算
本文探讨了C++和Java中的矢量运算与标量运算的性能比较,解释了矢量运算的原理和为什么它比标量运算快,包括并行性、数据局部性、指令优化和数据重用等优势。文章还提供了C++和Java的矢量运算示例代码,并展示了运行结果,以证明矢量运算在处理大量数据时的性能优势。
343 0
C++矢量运算与java矢量运算