# ã¯ã©ã¹ Convolution
- - -
NTTã§å°ä½Convolutionãè¨ç®ããã¯ã©ã¹ã§ããå
é¨ã§ModIntã使ç¨ãã¦ããã¡ã½ããã1åããã®ã§ã
ãããåé¤ãããã使ç¨ããå ´åã¯ModIntãè²¼ãä»ãã¦ãã ããã
## ä½¿ãæ¹
1. static㪠`Convolution.convolute` ãå¼ã³åºãã¾ã.
```java
public static void main(String[] args) {
// NTTç¨ç´ æ°ã®Modãæå®ãã¾ã
int mod = 998244353;
long[] a = { 1, 2, 3, 4, 5 };
long[] b = { 6, 7, 8 };
// ç³ã¿è¾¼ã¿ãè¨ç®ãã¾qããa.length + b.length - 1 ã®é
åã帰ãã¾ãã
long[] ret = Convolution.convolution(a, b, mod);
System.out.println(Arrays.toString(ret));
}
```
## ã¡ã½ãã
### convolution (NTT prime only)
```java
public static long[] convolution(long[] a, long[] b, int mod)
```
ãªã¹ãã¾ãã¯é
å `a` 㨠`b` ã®å°ä½convolutionãè¨ç®ãã¾ã.
è¨ç®é: $O(n Â¥log(n))$
å¶ç´
- `mod` NTTç¨ç´ æ°(998244353, 1053818881, 1004535809, ...)
### convolution (Any mod)
```java
public static long[] convolutionLL(long[] a, long[] b, int mod)
public static java.util.List