给定一个数组arr,返回不包含本位置值的累乘数组
例如,arr=[2,3,1,4],返回[12, 8, 24, 6],即除自己外,其他位置上的累乘
[要求]
时间复杂度为
,额外空间复杂度为
第一行有两个整数N, P。分别表示序列长度,模数(即输出的每个数需要对此取模)
接下来一行N个整数表示数组内的数
输出N个整数表示答案
4 100000007 2 3 1 4
12 8 24 6
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int p = scanner.nextInt();
long[] arr = new long[n];
for(int i=0;i<n;i++){
arr[i] = scanner.nextInt();
}
long[] lr = new long[n];
long[] rl = new long[n];
lr[0]=1;
rl[n-1]=1;
for(int i=1;i<n;i++){
lr[i] = lr[i-1] * arr[i-1] % p;
}
for(int i=n-2;i>=0;i--){
rl[i] = rl[i+1] * arr[i+1] % p;
}
for(int i=0;i<n;i++){
System.out.print(lr[i]*rl[i]%p+" ");
}
}
}