青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

【AHOI2013復仇】數論之神

Posted on 2013-03-15 19:24 Mato_No1 閱讀(1440) 評論(2)  編輯 收藏 引用 所屬分類: 數論
原題地址
這題真是太神犇了……可以讓人完全搞懂數論同余部分的全部內容……

題解……由于虹貓大神已經在空間里寫得很詳細了,所以就不腫么寫了囧……
主要說一下一些難想的和容易搞疵的地方:
(1)中國剩余定理的那個推論(多個同余方程的模數互質,則整個方程組在小于所有模數之積的范圍內的解數等于各個方程解數之積)其實是很強大的,不光對線性同余方程有用,對這種非線性的同余方程也有用,只需要所有方程都滿足:若模數為MOD,則a是解當且僅當(a+MOD)是解……本題顯然滿足,因此,只要在按質因數拆分后求出各個方程的解數,再相乘即可(本沙茶就是這里木有想起來,結果看了虹貓的題解囧……);
(2)對于余數不為0且和模數不互質的情況要特別注意(這個好像很多標程都疵了,比如虹貓給的標程,不過數據弱,讓它們過了囧),首先必須是余數含p(p為該方程模數的質因數)因子的個數j是a的倍數(也就是余數是p^a的倍數)才能有解,然后,當有解時,轉化為解必須是p^(j/a)的倍數以及x/(p^(j/a))滿足一個模數指數為原來指數減j的方程,這里需要注意,這個新方程的解數乘以p^(j-j/a)才是原來方程的解數!!道理很簡單,因為模數除以了p^j,而x只除以了p^(j/a)……可以用一組數據檢驗:3 330750 6643012,結果是135而不是15;
(3)原根只能暴力求(不過最小原根都很小,1000以內的所有質數最小原根最大只有19……),但在求的時候有一個小的優化:首先p的原根也是p的任意整數次方的原根,然后求p的原根時,將(p-1)的非自身因數(預先求出)遞減排序,這樣可以比較快地排除不合法解;
(4)求逆元時一定要注意,如果得到的逆元是負數,要轉化為正數,另外要取模;
(5)BSGS的時候一定要注意去重,在保留重復元素的情況下即使使用另一種二分查找也會疵的;
(6)數組不要開小了;

代碼:
#include <iostream>
#include 
<stdio.h>
#include 
<stdlib.h>
#include 
<string.h>
#include 
<math.h>
#include 
<algorithm>
using namespace std;
#define re(i, n) for (int i=0; i<n; i++)
#define re1(i, n) for (int i=1; i<=n; i++)
#define re2(i, l, r) for (int i=l; i<r; i++)
#define re3(i, l, r) for (int i=l; i<=r; i++)
#define rre(i, n) for (int i=n-1; i>=0; i--)
#define rre1(i, n) for (int i=n; i>0; i--)
#define rre2(i, r, l) for (int i=r-1; i>=l; i--)
#define rre3(i, r, l) for (int i=r; i>=l; i--)
#define ll long long
const int MAXN = 110, MAXP = 50010, INF = ~0U >> 2;
int P_LEN, _P[MAXP + 1], P[MAXP + 1];
int A, B, M, n, DS[MAXN], DK[MAXN], R[MAXN], KR[MAXP], res;
struct sss {
    
int v, No;
    
bool operator< (sss s0) const {return v < s0.v || v == s0.v && No < s0.No;}
} Z[MAXP];
void prepare0()
{
    P_LEN 
= 0int v0;
    
for (int i=2; i<=MAXP; i++) {
        
if (!_P[i]) P[P_LEN++= _P[i] = i; v0 = _P[i] <= MAXP / i ? _P[i] : MAXP / i;
        
for (int j=0; j<P_LEN && P[j]<=v0; j++) _P[i * P[j]] = P[j];
    }
}
void prepare()
{
    n 
= 0int M0 = M;
    re(i, P_LEN) 
if (!(M0 % P[i])) {
        DS[n] 
= P[i]; DK[n] = 1; M0 /= P[i]; while (!(M0 % P[i])) {DK[n]++; M0 /= P[i];} n++;
        
if (M0 == 1break;
    }
    
if (M0 > 1) {DS[n] = M0; DK[n++= 1;}
    
int x;
    re(i, n) {
        x 
= 1; re(j, DK[i]) x *= DS[i];
        R[i] 
= B % x;
    }
}
ll pow0(ll a, 
int b, ll MOD)
{
    
if (b) {ll _ = pow0(a, b >> 1, MOD); _ = _ * _ % MOD; if (b & 1) _ = _ * a % MOD; return _;} else return 1;
}
void exgcd(int a, int b, int &x, int &y)
{
    
if (b) {
        
int _x, _y; exgcd(b, a % b, _x, _y);
        x 
= _y; y = _x - a / b * _y;
    } 
else {x = 1; y = 0;}
}
int gcd(int a, int b)
{
    
int r = 0while (b) {r = a % b; a = b; b = r;} return a;
}
void solve()
{
    
int x, y; res = 1;
    re(i, n) 
if (!R[i]) {
        
if (DK[i] < A) x = 1else x = (DK[i] - 1/ A + 1;
        re2(j, x, DK[i]) res 
*= DS[i];
    } 
else if (!(R[i] % DS[i])) {
        x 
= 0while (!(R[i] % DS[i])) {R[i] /= DS[i]; x++;}
        
if (x % A) {res = 0return;} else {
            DK[i] 
-= x; y = x / A;
            re2(j, y, x) res 
*= DS[i];
        }
    }
    
int phi, m0, m1, KR_len, _r, v0, _left, _right, _mid, T; bool FF;
    re(i, n) 
if (R[i]) {
        x 
= DS[i] - 1; KR_len = 0;
        
for (int j=2; j*j<=x; j++if (!(x % j)) {
            KR[KR_len
++= j;
            
if (j * j < x) KR[KR_len++= x / j;
        }
        KR[KR_len
++= 1;
        re2(j, 
2, DS[i]) {
            FF 
= 1;
            rre(k, KR_len) {
                _r 
= (int) pow0(j, KR[k], DS[i]);
                
if (_r == 1) {FF = 0break;}
            }
            
if (FF) {x = j; break;}
        }
        phi 
= DS[i] - 1; re2(j, 1, DK[i]) phi *= DS[i]; v0 = phi / (DS[i] - 1* DS[i];
        m0 
= (int) ceil(sqrt(phi) - 1e-10);
        Z[
0].v = 1; Z[0].No = 0; re2(j, 1, m0) {Z[j].v = (ll) Z[j - 1].v * x % v0; Z[j].No = j;}
        _r 
= (ll) Z[m0 - 1].v * x % v0; sort(Z, Z + m0);
        m1 
= 1; re2(j, 1, m0) if (Z[j].v > Z[j - 1].v) Z[m1++= Z[j];
        exgcd(_r, v0, x, y); 
if (x < 0) x += v0; y = R[i];
        re(j, m0) {
            _left 
= 0; _right = m1 - 1; T = -1;
            
while (_left <= _right) {
                _mid 
= _left + _right >> 1;
                
if (y == Z[_mid].v) {T = j * m0 + Z[_mid].No; break;}
                
else if (y < Z[_mid].v) _right = _mid - 1else _left = _mid + 1;
            }
            
if (T >= 0breakelse y = (ll) y * x % v0;
        }
        x 
= gcd(A, phi); if (T % x) {res = 0break;} else res *= x;
    }
}
int main()
{
    
int tests;
    scanf(
"%d"&tests);
    prepare0();
    re(testno, tests) {
        scanf(
"%d%d%d"&A, &B, &M); M += M + 1; B %= M;
        
if (!A) {
            
if (B == 1) res = M; else res = 0;
        } 
else {
            prepare();
            solve();
        }
        printf(
"%d\n", res);
    }
    
return 0;
}

Feedback

# re: 【AHOI2013復仇】數論之神  回復  更多評論   

2013-04-08 10:30 by zrz1996
能發一下原題嗎?zrz96@163.com 謝謝

# re: 【AHOI2013復仇】數論之神  回復  更多評論   

2013-06-14 17:02 by SillyJ
能發一下原題嗎?sillyhook00@126.com 謝謝
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲国产日韩欧美| 久久久av水蜜桃| 亚洲专区欧美专区| 国产精品theporn| 国产欧美一区二区三区另类精品| 蜜臀a∨国产成人精品| 欧美一区在线直播| 一区二区在线视频| 亚洲美女在线视频| 亚洲第一中文字幕在线观看| 一区在线免费观看| 玖玖玖免费嫩草在线影院一区| 欧美精品尤物在线| 亚洲精品中文字幕有码专区| 亚洲人成77777在线观看网| 美脚丝袜一区二区三区在线观看 | 亚洲综合日韩| 欧美一级片久久久久久久| 国产欧美视频在线观看| 亚洲破处大片| 国产伦精品一区二区三区高清| 一区二区三区欧美视频| 久久精品av麻豆的观看方式| 欧美三级免费| 老巨人导航500精品| 久久久久国产成人精品亚洲午夜| 红桃视频国产精品| 一区二区精品在线观看| 亚洲日本成人| 久久这里有精品15一区二区三区 | 免费在线成人av| 欧美mv日韩mv国产网站app| 久久成人久久爱| 国产精品另类一区| 亚洲一区二区三区高清| 欧美日韩一本到| 欧美日韩美女| 国产精品永久免费在线| 午夜精品福利一区二区三区av| 看片网站欧美日韩| 欧美在线观看视频在线| 亚洲韩国一区二区三区| 久久精品夜色噜噜亚洲a∨ | 亚洲一区二区三区欧美| 亚洲第一精品夜夜躁人人爽| 欧美在线视频播放| 亚洲福利在线视频| 国产午夜精品一区理论片飘花 | 久久国产免费看| 亚洲精品激情| 亚洲国产精品www| 一区二区高清| 久久久久在线| 黄色国产精品| 香蕉久久一区二区不卡无毒影院| 亚洲高清av在线| 亚洲欧美日韩精品综合在线观看| 久久久999成人| 蜜臀久久久99精品久久久久久 | 欧美经典一区二区| 亚洲一区二区免费视频| 久久久久久9999| 夜夜嗨av一区二区三区网站四季av| 久久成人18免费网站| 亚洲国产精品成人| 亚洲精品视频中文字幕| 亚洲欧美欧美一区二区三区| 在线看无码的免费网站| 国产精品高潮呻吟久久av无限| 亚洲精品视频免费| 午夜一区在线| 亚洲国产精品久久精品怡红院| 午夜在线一区二区| 午夜精品一区二区三区在线播放| 国产精品人成在线观看免费| 久久色在线播放| 亚洲综合色婷婷| 久久www免费人成看片高清 | 免费在线一区二区| 国产亚洲精品v| 亚洲黄色在线视频| 国模大胆一区二区三区| 国内伊人久久久久久网站视频| 美女诱惑黄网站一区| 欧美护士18xxxxhd| 久久国产夜色精品鲁鲁99| 欧美国产日产韩国视频| 欧美中在线观看| 国产精品福利片| 国产色视频一区| 欧美一区二区三区四区高清| 亚洲精品乱码久久久久久蜜桃麻豆 | 另类综合日韩欧美亚洲| 亚洲视频电影图片偷拍一区| 亚洲字幕在线观看| 99精品欧美一区二区三区综合在线 | 国产日韩精品久久| 欧美成人视屏| 国产精品99久久不卡二区| 中文亚洲免费| 国产午夜精品久久久| 亚洲欧洲日本一区二区三区| 久久久久国产精品人| 久久国产精品久久久| 久久婷婷久久| 午夜精品一区二区三区四区 | 久久久免费av| 久久中文字幕一区| 韩国自拍一区| 久久综合中文色婷婷| 欧美成人69av| 亚洲视频香蕉人妖| 米奇777在线欧美播放| 亚洲精品小视频| 欧美成人午夜影院| 裸体丰满少妇做受久久99精品| 国产精品国色综合久久| 亚洲欧美一区二区三区久久 | 亚洲国产91精品在线观看| 亚洲一区二区三区在线视频| 国产精品草莓在线免费观看| 亚洲一本大道在线| 一区二区三区精品在线 | 永久免费精品影视网站| 日韩写真视频在线观看| 99精品热6080yy久久| 久久天堂国产精品| 免费欧美电影| 国产精品理论片| 久久亚洲欧美国产精品乐播| 午夜精品久久久久久久久久久久| 亚洲一区高清| 91久久亚洲| 亚洲美女性视频| 久久一区激情| 久久精品视频在线看| 悠悠资源网亚洲青| 久久精品视频在线播放| 欧美亚洲视频一区二区| 国产欧美一区二区精品性| 久久久国产亚洲精品| 欧美亚洲在线| 亚洲美女网站| 欧美在线观看天堂一区二区三区| 亚洲高清不卡在线观看| 午夜精品一区二区三区在线播放| 亚洲国产1区| 亚洲大片免费看| 最新日韩在线视频| 亚洲精品老司机| 国自产拍偷拍福利精品免费一| 久久亚洲免费| 欧美在线视频一区二区| 宅男在线国产精品| 欧美激情小视频| 一本久道久久久| 伊大人香蕉综合8在线视| 国产精品家庭影院| 蜜桃av一区二区在线观看| 久久国产精品99国产| 亚洲一二三级电影| 久久精品水蜜桃av综合天堂| 亚洲电影有码| 日韩视频免费在线观看| 亚洲三级国产| 国产精品三级久久久久久电影| 99国产成+人+综合+亚洲欧美| 亚洲男人的天堂在线aⅴ视频| 亚洲一区国产| 国产日本亚洲高清| 欧美在线视频在线播放完整版免费观看 | 久久综合九色99| 亚洲自拍三区| 99在线视频精品| 国产日韩欧美在线视频观看| 久久综合伊人77777蜜臀| 99这里只有久久精品视频| 久久久91精品国产一区二区精品| 香蕉成人伊视频在线观看 | 久久国产直播| 国产精品中文在线| 久久综合九色综合欧美就去吻 | 国内精品伊人久久久久av一坑| 亚洲福利电影| 国产精品揄拍500视频| 欧美一级视频免费在线观看| 亚洲三级色网| 国产精品红桃| 久久精品一区二区三区四区 | 亚洲美女尤物影院| 最新成人av网站| 久久天堂国产精品| 久久久久高清| 亚洲欧美精品| 欧美日韩999| 亚洲字幕在线观看| 欧美日韩专区| 久久国产精品一区二区三区| 午夜日韩av| 欧美日本亚洲视频|