给定 n 个正整数 ai,请你输出这些数的乘积的约数个数,答案对 109+7 取模。
输入格式
第一行包含整数 n。
接下来 n 行,每行包含一个整数 ai。
输出格式
输出一个整数,表示所给正整数的乘积的约数个数,答案需对 109+7 取模。
数据范围
1 ≤ n ≤ 100,
1 ≤ ai ≤ 2 × 109
输入样例:
3
2
6
8
输出样例:
12
#include<iostream>#include<algorithm>#include<unordered_map>usingnamespace std;typedeflonglong LL;constint N =110, mod =1e9+7;intmain(){int n;
cin >> n;
unordered_map<int,int> primes;while(n --){int x;
cin >> x;for(int i =2; i <= x / i; i ++)while(x % i ==0){
x /= i;
primes[i]++;}if(x >1) primes[x]++;}
LL res =1;for(auto p : primes) res = res *(p.second +1)% mod;
cout << res << endl;return0;}
给定 n 个正整数 ai,请你输出这些数的乘积的约数之和,答案对 109+7 取模。
输入格式
第一行包含整数 n。
接下来 n 行,每行包含一个整数 ai。
输出格式
输出一个整数,表示所给正整数的乘积的约数之和,答案需对 109+7 取模。
数据范围
1 ≤ n ≤ 100,
1 ≤ ai ≤ 2 × 109
输入样例:
3
2
6
8
输出样例:
252
#include<iostream>#include<algorithm>#include<unordered_map>#include<vector>usingnamespace std;typedeflonglong LL;constint N =110, mod =1e9+7;intmain(){int n;
cin >> n;
unordered_map<int,int> primes;while(n --){int x;
cin >> x;for(int i =2; i <= x / i; i ++)while(x % i ==0){
x /= i;
primes[i]++;}if(x >1) primes[x]++;}
LL res =1;for(auto p : primes){
LL a = p.first, b = p.second;
LL t =1;while(b --) t =(t * a +1)% mod;
res = res * t % mod;}
cout << res << endl;return0;}
数学知识:约数试除法求约数约数个数约数之和最大公约数试除法求约数题解Y总给定 n 个正整数 ai,对于每个整数 ai,请你按照从小到大的顺序输出它的所有约数。输入格式第一行包含整数 n。接下来 n 行,每行包含一个整数 ai。输出格式输出共 n 行,其中第 i 行输出第 i 个整数 ai 的所有约数。数据范围1 ≤ n ≤ 100,2 ≤ ai ≤ 2 × 109输入样例:268输出样例:1 2 3 6 1 2 4 8#include <iost