n個の正の整数aiが与えられた場合、これらの数の積のおおよその数を出力してください。答えはモジュロ109 + 7です。
入力形式
最初の行には整数nが含まれています。
次のn行には、各行に整数aiが含まれています。
出力形式
整数が出力されます。これは、与えられた正の整数のおおよその積を表し、答えは109 + 7を法とする必要があります。
データ範囲
1≤n≤100、1≤ai≤2
∗ 109
入力サンプル:
3
2
6
8
出力サンプル:
12
分析:
ユニークな分解定理
時間の複雑さ:O(sqrt(N))
約数の合計を求め
ます約数の合計を求めます
#include<bits/stdc++.h>
using namespace std;
const int MOD=1e9+7;
const int N=1e6+100;
#define x first
#define y second
typedef long long ll;
map<int,int>prime;
int t,x;
int main()
{
cin>>t;
for(int j=1;j<=t;j++)
{
scanf("%d",&x);
for(int i=2;i<=x/i;i++)
{
while(x%i==0)
{
x/=i;
prime[i]++;
}
}
if(x>1) prime[x]++;
}
ll res=1;
for(auto it : prime)
{
res=res*(it.y+1)%MOD;
}
cout<<res<<endl;
}
n個の正の整数aiが与えられた場合、これらの数値の積の約数の合計を出力してください。答えはモジュロ109 + 7です。
入力形式
最初の行には整数nが含まれています。
次のn行には、各行に整数aiが含まれています。
出力形式
与えられた正の整数の積の除数の合計を表す整数を出力します。答えはモジュロ109 + 7である必要があります。
データ範囲
1≤n≤100、1≤ai≤2
∗ 109
入力サンプル:
3
2
6
8
出力サンプル:
252
分析:
除数の合計
#include<bits/stdc++.h>
using namespace std;
const int MOD=1e9+7;
const int N=1e6+100;
#define x first
#define y second
typedef long long ll;
map<int,int>prime;
int t,x;
int main()
{
cin>>t;
for(int j=1;j<=t;j++)
{
scanf("%d",&x);
for(int i=2;i<=x/i;i++)
{
while(x%i==0)
{
x/=i;
prime[i]++;
}
}
if(x>1) prime[x]++;
}
ll res=1;
for(auto it : prime)
{
int b=it.y;
ll ans=1;
while(b--) ans=(ans*it.x+1)%MOD;
res=res*ans%MOD;
}
cout<<res<<endl;
}