首页 > 其他 > 详细

九余数定理(同余定理)

时间:2017-04-09 15:53:35      阅读:267      评论:0      收藏:0      [点我收藏+]

问题 O: 神奇的数字9

时间限制: 1 Sec 内存限制: 128 MB

提交: 49 解决: 8

题目描述

给定一个数N(没有前导0)和Q次操作,每次操作修改第i位数字 为 v(保证不会把第一位修改为0),对每次操作判定新数能否被9整除。

若满足被9整除输出1,反之输出0。

输入

有多组测试数据,请处理到文件结束。

每组数据有两个整数N和Q,接下来有Q行代表Q次操作,每行有两个整数i和v。

后台数据保证0 <= N <= 10^1000000,1 <= Q <= 10^6,1 <= i <= |N|,0 <= v <= 9。

输出

每组数据输出Q行,代表对Q次操作后的判定。

样例输入

999 3
2 0
3 0
2 9
10000000000000000000000000000000000000000000000 1
2 8
10000000000000000000000000000000000000000000000 4
2 9
3 8
4 9
5 9

样例输出

1
1
1
1
0
1
1
1

由同余定理可推导出,凡是各个位数相加能被九整除得数,这个数也能被九整除!
这个题目的小坑就是注意要每次询问时更改n中修改的值不然会影响以后再次更改时的计算。

#include<bits/stdc++.h>
using namespace std;
char n[1000005];
int main()
{
long long i,j,temp,v,Q;
while(cin>>n>>Q){
temp=0;
int m=strlen(n);
for(i=0;i<m;++i) temp+=n[i]-‘0‘%9;
while(Q--){int temp2;
scanf("%d%d",&j,&v);
temp=temp-(n[j-1]-‘0‘)+v;
n[j-1]=v+‘0‘;
if(temp%9==0) puts("1");
else puts("0");

}
}
return 0;
}

九余数定理(同余定理)

原文:http://www.cnblogs.com/zzqc/p/6684794.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!