除数の数/除数の合計---------------数論(一意の分解)

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;
}
公開された元の記事572件 賞賛された14件 ビュー10,000件以上

おすすめ

転載: blog.csdn.net/qq_43690454/article/details/105200242