【题目描述】
给一个关于x的多项式,并给定一个x,求该多项式在带入该x时的值最后k位数字。
【输入描述】
第一行两个整数n、k;
之后的n行,每行两个数ai和bi,表示多项式的一项ai*x^bi;
最后一行一个整数x。
【输出描述】
输出k行,按顺序输出该多项式带入x后值的最后k位数字,若不足k位,则高位补零。
【输入样例】
2 1
3 2
1 5
3
【输出样例】
0
【数据范围及提示】
对于100%的数据,1 <= n <= 100000,1 <= ai,bi,x <= 10^9,1 <= k <= 8。
#include<cstdio> #include<iostream> #define N 100100 using namespace std; int n,k,ki=1,x,cnt=0; long long ans; int a[N],b[N],an[10]; long long ksm(long long p,long long q) { long long sum=1; while (p>0) { if (p%2) sum=sum*q%ki; q=q%ki*q%ki; p/=2; } return sum; } void print() { while (ans>0) { an[++cnt]=ans%10; ans/=10; } if (cnt<k) { for (int i=1;i<=k-cnt;i++) printf("0 "); } for (int i=cnt;i>=1;i--) printf("%d ",an[i]); } int main() { freopen("digits.in","r",stdin); freopen("digits.out","w",stdout); scanf("%d%d",&n,&k); for (int i=1;i<=k;i++) ki*=10; for (int i=1;i<=n;i++) scanf("%d%d",&a[i],&b[i]); scanf("%d",&x); for (int i=1;i<=n;i++) ans=(ans+ksm(b[i],x)*a[i]%ki)%ki; print(); fclose(stdin); fclose(stdout); return 0; }