数学——前缀积和后缀积

来源:互联网 发布:淘宝套现 编辑:程序博客网 时间:2024/06/10 01:55

Description:

给出数列A1,A2,...,AN,并设

Bi = (A1 * A2 * A3 ... AN) / Ai  mod (109 + 7)

现要求把所有的Bi 算出来


Input:

输入包含多组测试数据。对于每组数据,第1 行,1 个整数N(1 ≤N ≤100,000), 表示数列的长度。第2

行,N 个整数A1,A2,...,AN(1 ≤Ai≤109),表示给出的数列。输入以一个 0 表示结尾。


Output:

对于每组数据,输出一行,N 个整数用空格分隔,表示算出的B1,B2,...,BN

Sample Input:

3

2 3

0

Sample Output:

6 3 2

#include<cstdio>#include<cstring>#include<algorithm>#define mod 1000000007const long long maxn=100000+10;long long a[maxn],qian[maxn],hou[maxn];using namespace std;int main(){    int n,i;    while(scanf("%d",&n)==1&&n)    {        for(i=1;i<=n;i++)            scanf("%lld",&a[i]);        qian[0]=1;        for(i=1;i<=n;i++)            qian[i]=(qian[i-1]*a[i])%mod;        hou[n+1]=1;        for(i=n;i>=1;i--)            hou[i]=(hou[i+1]*a[i])%mod;        for(i=1;i<=n;i++)            printf("%lld%c",(qian[i-1]*hou[i+1])%mod,i==n?'\n':' ');    }    return 0;}


0 0
原创粉丝点击