题目描述
给定 a1,a2,⋯,an,请计算一组乘积,记为P1,P2,⋯,Pn,其中 Pi 的定义如下:
也就是说,Pi 是 a1 到 an 的连乘再除去 ai。由于答案可能比较大,输出每个 Pi 模 10000 的余数。
输入格式
- 第一行:单个整数表示 n;
- 第二行:�n 个整数表示 a1,a2,⋯,an。
输出格式
共 n 行:第 i 行输出 Pi 模 10000 的余数。
数据范围
- 对于 30%的数据,2≤n≤1000;
- 对于 60% 的数据,2≤n≤10000;
- 对于 100%1 的数据,2≤n≤100000,1≤ai≤10000。
样例数据
输入:
4
1 3 4 6
输出:
72
24
18
12
题解:利用前缀,后缀进行解题,代码如下。
#include <iostream>
using namespace std;
const int N=1e5+10,mod=10000;
int a[N],s1[N],s2[N];
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
//前缀:从前到后一个个乘,乘积放到对应的i里面
s1[0]=1;
for(int i=1;i<=n;i++)
s1[i]=s1[i-1]*a[i]%mod;
//后缀:从后到前一个个乘,乘积放到对应的i里面
s2[n+1]=1;
for(int i=n;i>=0;i--)
s2[i]=s2[i+1]*a[i]%mod;
for(int i=1;i<=n;i++)
cout<<s1[i-1]*s2[i+1]%mod<<endl;
return 0;
}