您现在的位置是:首页 > 编程 > 

约数个数(c++, java)

2025-07-22 06:11:57
约数个数(c++, java) 约数个数给定 n 个正整数 ai,请你输出这些数的乘积的约数个数,答案对 109+7 取模。输入格式 第一行包含整数 n。接下来 n 行,每行包含一个整数 ai。输出格式 输出一个整数,表示所给正整数的乘积的约数个数,答案需对 109+7取模。数据范围 1≤n≤100, 1≤ai≤2×109 输入样例:代码语言:javascript代码运行次数:0运行复

约数个数(c++, java)

约数个数

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

输入格式 第一行包含整数 n。

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

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

数据范围 1≤n≤100, 1≤ai≤2×109 输入样例:

代码语言:javascript代码运行次数:0运行复制

2
6
8

输出样例:

代码语言:javascript代码运行次数:0运行复制
12

算法思路

主要是需要知道公式

提交代码

C++

代码语言:javascript代码运行次数:0运行复制
#include<bits/stdc++.h>
using namespace std;

typedef long long LL;
ct 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

代码语言:javascript代码运行次数:0运行复制
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);
        println(res);
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2025-01-20,如有侵权请联系 cloudcommunity@tencent 删除javac++存储int数据

#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格

本文地址:http://www.dnpztj.cn/biancheng/1144743.html

相关标签:无
上传时间: 2025-07-19 11:13:51
留言与评论(共有 13 条评论)
本站网友 log4cpp
22分钟前 发表
答案对 109+7 取模
本站网友 儿童心理咨询师
6分钟前 发表
0) + cnt); } if (cur > 1) m.put(cur
本站网友 周小云
9分钟前 发表
答案对 109+7 取模
本站网友 梦见双胞胎男孩
16分钟前 发表
0) + 1); // 如果最后这个数没有成为1 那么代表这个数剩下的部也是也给质数 // 也算一个 } long res = 1l; // 这里就是公式的应用 for (Integer cur
本站网友 中国大酒店
8分钟前 发表
接下来 n 行
本站网友 雪梨膏
29分钟前 发表
1≤ai≤2×109 输入样例:代码语言:javascript代码运行次数:0运行复制 2 6 8输出样例:代码语言:javascript代码运行次数:0运行复制12算法思路主要是需要知道公式 提交代码C++代码语言:javascript代码运行次数:0运行复制#include<bits/stdc++.h> using namespace std; typedef long long LL; ct int mod = 1e9 + 7; int main() { int n; cin >> n; unordered_map<int
本站网友 海阔天空外挂
22分钟前 发表
0) + 1); // 如果最后这个数没有成为1 那么代表这个数剩下的部也是也给质数 // 也算一个 } long res = 1l; // 这里就是公式的应用 for (Integer cur
本站网友 天津大学仁爱学院邮编
21分钟前 发表
每行包含一个整数 ai
本站网友 独立博客
26分钟前 发表
输出格式 输出一个整数
本站网友 文件传输
27分钟前 发表
java) 约数个数给定 n 个正整数 ai
本站网友 貔貅开光吉日
27分钟前 发表
int> m; while(n --) { int t; cin >> t; for (int i = 2; i <= t / i; ++ i) { while(t % i == 0) { t /= i
本站网友 国学府
7分钟前 发表
m.keySet()) res = res * (m.get(cur) + 1) % ((int)1e9 + 7); println(res); } }本文参与 腾讯云自媒体同步曝光计划