leetcode 152周のレース

1.プライム手配
は、すべての「素数」(1のインデックス開始)の「プライムインデックス」に配置する必要がありますように、1から設計、配置計画のn個の数に与えるのを助けるためにのために、あなたが可能な解決策の合計数を返す必要があります。
さんは「プライム」を見てみましょう:素数は1より大きくなければなりません、と表現するその2つの正の整数の積より小さくすることはできません。
答えは非常に大きくなる可能性がありますので、その応答モードのmodは10 ^ 9 + 7の後になることが返却してください。
1 <= N <= 100の
リンク:https://leetcode-cn.com/contest/weekly-contest-152/problems/prime-arrangements/

考える:被写体がさらに需要を分析することができるように、この質問は、プライムふるいを検討していることは素数の非整列と整列素数の数の積です。

class Solution {
public:
    int mod=1e9+7;
    vector<bool> st;
    vector<int> primers;
    int numPrimeArrangements(int n) {
        st=vector<bool>(n+1,false);
        int num=get_primers(n);
        long long int ans=1;
        long long int c1=1;
        long long int c2=1;
        for(int i=1;i<=num;++i){
            c1=1ll*c1*i%mod;
        }
        for(int i=1;i<=n-num;++i){
            c2=1ll*c2*i%mod;
        }
        ans=1ll*c1*c2%mod;
        return ans;
    }
    int get_primers(int n){
        for(int i=2;i<=n;++i){
            if(!st[i])primers.push_back(i);
            for(int j=0;j<primers.size()&&primers[j]<=n/i;++j){
                st[primers[j]*i]=true;
                if(i%primers[j]==0)
                    break;
            }
        }
        return primers.size();
    }
};

おすすめ

転載: www.cnblogs.com/clear-love/p/11447818.html