九校聯考DAY2T2 中國剩餘定理,積性篩

2021-08-27 20:33:09 字數 1826 閱讀 6177

整除符號為 |,d|n 在計算機語言中可被描述為 n%d == 0。

現有一算式 n|xm

x

m- x,給定 n,m,求 [1, n] 以內 x 解的個數。

解可能很大,輸出取模 998244353。

其中 n 的給定方式是由 c 個不超過 t 的質數的乘積給出的,c 和 t 的範圍會在資料範圍中給出。

第一行乙個 id 表示這個資料點的標號。

多組資料,其中第二行乙個整數 t 表示資料組數。對於每一組資料:

第一行兩個整數 c 和 m。

第二行 c 個整數,這些整數都是質數,且兩兩不同,他們的乘積即為n。

由於你可以通過輸入求出 t,輸入不再給出。

對於每組資料輸出一行,表示解的個數。

input

0

12 3

2 3

output

6
其中所有資料點都滿足 1 ≤ c ≤ 50,1 ≤ t ≤ 104104

,1 ≤ m ≤ 109109

,1 ≤ t ≤10000。

時間限制:

2.5s

2.5s

空間限制:

256mb

256mb

中國剩餘定理求方案數

暴力是對每個方程用快速冪列舉出可能解最後乘起來,80分

優秀的做法是用積性函式優化掉合數的快速冪,ac

#include

using namespace std;

#define rep(i,j,k) for(int i = j;i <= k;++i)

#define repp(i,j,k) for(int i = j;i >= k;--i)

#define rept(i,x) for(int i = linkk[x];i;i = e[i].n)

#define p pair

#define pil pair

#define pli pair

#define pll pair

#define pb push_back

#define pc putchar

#define mp make_pair

#define file(k) memset(k,0,sizeof(k))

#define ll long long

const

int p = 998244353;

int t[60];

int num[60];

int ans;

int c,m;

int prime[11000] , tot;

bool flag[10010];

int read()

while(c >= '0' && c <= '9') sum = sum * 10 + c - 48,c = getchar();

if(flag) return sum;

else

return -sum;

}int pow(int a,int x,int p)

return sum;

}int mi[10100];

void work(int m,int n,int x)

rep(j,1,tot)

num[x] += mi[i] == i;

}} void print(int x)

if(x >= 10)

putchar('0' + x % 10);

}void init()

int main()

五校聯考模擬賽Day2T2矩陣 容斥原理

n m 的網格,對其進行黑白染色,問每一行每一列至少有乙個黑格仔的方案數。考場上只會 n 3 的dp,還和指數級列舉乙個分qwq 設 f i j 表示到了第 i 行,已經有 j 列被染黑,然後暴力轉移上一行有幾個黑格仔 正解是容斥 首先固定好列,也就是保證每一列都有乙個黑格仔 這樣的方案是 2 n ...

嵊州普及Day2T2

題意 對於n個數的數列,進行排列,求第m個大於此數列的數列。思路 查詢後2個是否逆序,若是,將後3個遞迴。如此運算,找後面大於此數中最小數交換,然後將後面數列順序排列。相對簡單。見 include include include include include using namespace std...

集訓Day2 T2 新殼棧

description 小z設計了一種新的資料結構 新殼棧 首先,它和傳統的棧一樣支援壓入 彈出操作。此外,其棧頂的前c個元素是它的殼,支援翻轉操作。其中,c 2是乙個固定的正整數,表示殼的厚度。小z還希望,每次操作,無論是壓入 彈出還是翻轉,都僅用與c無關的常數時間完成。聰明的你能幫助她程式設計實...