2019マルチ大学研修コンテスト3から1006 - Fansblog - テーブルを打つ - 暴力

http://acm.hdu.edu.cn/showproblem.php?pid=6608

質問の意味:大きな素数P(1E14未満)に、Q値MODPを見つけ、(保証はとにかく、そこにあるように見える、私は文が存在しませんしませんでした)その最大の素数Qよりも小さい求めています!

何不滅の質問です初めが、どのように観客は瞬時感インテリジェンスが侮辱緑色です。どのような奇妙な自然の多くのように、チームメイトカード私はANS Pがテーブルを見て見つけるために呼ばれる1007、そして、非常に明確ではありません。= 2 PQはANS = 1のときということでは?

そして、この推定値が真であるように私たちは、このよう前に小さなデータを見つけ、(P-2)!%のPテーブルを作ります。

だから、最初のうち文の特別P = 3を確認し、Qを見つける方法を検討し、その後、Qは奇数でなければなりません。

暴力検索Qの複雑さを考えてみましょう:すべての素数定理の最初の(または直接は1E7が知っているテーブルを打つ)を得素数の数に応じて、おそらくこのよう6E5、Qは、暴力のプライム円であることを確認してください。

Qが素数でない場合は、極端な場合には、二つの異なる素数の積である、そのような分布の数は偉大でなければなりません。

次のコードは、このような極端な合成数を再生することができます:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;

const int MAXN = 1e7;

int pri[MAXN + 5], pritop;
bool notpri[MAXN + 5];
//pritop从1开始计数

void sieve(int n) {
    notpri[1] = 1;
    for(int i = 2; i <= n; i++) {
        if(!notpri[i])
            pri[++pritop] = i;
        for(int j = 1; j <= pritop && i * pri[j] <= n; j++) {
            notpri[i * pri[j]] = 1;
            if(i % pri[j] == 0)
                break;
        }
    }
    printf("ptop=%d\n", pritop);
}

vector<ll> H;

int main() {
#ifdef Yinku
    freopen("Yinku.in", "r", stdin);
#endif // Yinku
    sieve(MAXN);
    for(int i = pritop; i >= pritop - 100; --i) {
        for(int j = i - 1; j >= i - 1 - 100; --j) {
            H.push_back(1ll*pri[i]*pri[j]);
        }
    }
    sort(H.begin(),H.end(),greater<ll>());
    for(int i=0;i<100;++i){
        printf("i=%d num=%lld\n",i+1,H[i]);
    }
    return 0;
}

私たちは、合成数が非常に大きくなるような両極端の間のギャップを見ることができます!より2つの1E6の違い!

ptop=664579
i=1 num=99999640000243
i=2 num=99999620000261
i=3 num=99999440000783
i=4 num=99999340000513
i=5 num=99999280000567
i=6 num=99999220000621
i=7 num=99999200000639
i=8 num=99999160001539
i=9 num=99999140001653
i=10 num=99999100001701
i=11 num=99999080001827
i=12 num=99999040001863
i=13 num=99999020002001
i=14 num=99999020001917
i=15 num=99999000002059
i=16 num=99998980000837
i=17 num=99998920000891
i=18 num=99998800003591
i=19 num=99998800002511
i=20 num=99998800000999

また、三つの異なる素数の積場合Fangshanglaiは、実質的にどこまで低減されません。

だから、Qを見つける前に、いなくても5の上に、10以上に遭遇することが予想されていない、協調検証プロセスの極端な暴力の数の数を推測することができます。簡単に切断する刑を宣告コの数の他の素因数、暴力文のほとんどほんの一部のQは、ごくわずかです。

素数の間の間隔は、素数の合計数、平均が32である連続した素数の数ではない間隔遠く比較的大きな時間のコースを表示されますが、私は1000以下で推測しない、1000、私はギャングを願っています見積もりを与えますか?

だから、おそらく暴力的な文章Qは、最悪の場合は、6E6についてですTは、(タイトル変更の後ろに負のフィードバックの顔を変更するには)直接の暴力比較的小さいことを検討してください。

投機(ウィルソンの定理):( P-2)!= 1 MOD Pの結果が、1つの逆要素によって両側上の2つのそれぞれはまた1000log1e14画分は、無視できる程度である、1000転送まで、次の番号に転送することができます。

最後に、慎重にオーバーフローすることが、我々は多くの場所を変更し、場所の逆を取る力を__int128変更しましたが、オーバーフローWA1、あまりにもピットで、その結果、高速で変化しませんでした。

実際には、単に乗算剰余を使用して、あなたはすぐに掛けることができます。

おすすめ

転載: www.cnblogs.com/Yinku/p/11267358.html
おすすめ