模 | ||||||
|
||||||
Description | ||||||
已知一个N进制的B位数X,要求找一个同为N进制的B位数Y,使得Z-X+N^B≡Z+Y(mod N^B)对与任意同为N进制的B位数Z都成立。 (所有数都为正数) |
||||||
Input | ||||||
多组测试数据: 每组第一行两个数N,B,(N,B<=10^6)。 第二行B个数Xi,表示X的每一位。(高位在前,低位在后,Xi < N)。 所有数都为正数。 |
||||||
Output | ||||||
对于每组,输出一个N进制的B位数Y,输出格式同输入,具体见样例。 |
||||||
Sample Input | ||||||
10 3 0 2 0 |
||||||
Sample Output | ||||||
9 8 0 |
||||||
Hint | ||||||
第一组测试样例中,输出的X为十进制的20,输出的Y为十进制980。 |
#include<iostream> #include<stdio.h> #include<string.h> #include<algorithm> #include<math.h> #include<queue> #include<set> using namespace std; int a[1000000]; int b1[1000000]; int main() { int n,b; while(~scanf("%d%d",&n,&b)) { int i; for(i=0;i<b;i++) { scanf("%d",&a[i]); } int key=0; for(i=b-1;i>=0;i--) { if(a[i]==0&&!key) { b1[i]=0; } else if(!key) { key=1; b1[i]=n-a[i]; } else { b1[i]=n-1-a[i]; } } printf("%d",b1[0]); for(i=1;i<b;i++) { printf(" %d",b1[i]); } printf("\n"); } return 0; }