题目描述
给出数列A1;A2; : : : ;AN,并设
现要求把所有的Bi 算出来。
输入
输入包含多组测试数据。对于每组数据,第1 行,1 个整数N(1 <= N <= 100 000), 表示数列的长度。第2
行,N 个整数A1,A2, ......,AN(1 <= Ai <= 109),表示给出的数列。输入以一个0 表示结尾。
行,N 个整数A1,A2, ......,AN(1 <= Ai <= 109),表示给出的数列。输入以一个0 表示结尾。
输出
对于每组数据,输出一行,N 个整数用空格分隔,表示算出的B1,B2, ....,BN。
样例输入
31 2 30
样例输出
6 3 2
#include<stdio.h>
#define mod 1000000007
long long a[110000];
long long b[110000];
long long num[110000];
int main()
{
int n;
while(scanf("%d",&n)&&(n!=0)){
int i;
for(i=1;i<=n;i++)
scanf("%lld",&num[i]);
a[0]=1;
b[n+1]=1;
for(i=1;i<=n;i++) //前缀积
a[i]=a[i-1]*num[i]%mod;
for(i=n;i>=1;i--) //后缀积
b[i]=b[i+1]*num[i]%mod;
for(i=1;i<=n;i++){ //去掉中间项
printf("%lld",a[i-1]*b[i+1]%mod);
if(i!=n)printf(" ");
}
printf("\n");
}
}