//蒟蒻在此记录一下方便随时回来查看dalao见笑
如何判断数能被2-11整除
1.能被2整除:只要个位是0,2,4,6,8就行:a*10+b,10是2的倍数。
2.能被3整除:x=a1+a210^1+a310^2…,因为10除3余1,100除3余1…所以a1+a2+a3+…+an能整除3即可。即各位上之和整除3.
3.能被4整除:末两位能被 4 整除的数能被4整除,x=a*100+b,100是4的倍数,所以b(末两位)整除即可
4.能被5整除:个位是 0 或 5 的数能被 5 整除
5.能被6整除:同时能被2和3整除即可。
6.能被7整除:用割尾法,有点复杂暂时不介绍。
7.能被8整除:末三位能被 8 整除的数能被 8 整除。x=a*1000+b和4相同推导。
8.能被9整除:各个数位上的数字之和能被 9 整除的数能被 9 整除,和3类似。
9.能被10整除:末尾是0即可。
10。能被11整除:奇数位数字之和与偶数位数字之和的差是 11 的倍数(包括 0)的数能被 11 整除。因为10除以11余-1,100除以11余1,1000除以11余-1,依次类推即可。
取一个数的后n位只需要取n+1(1后面n个0)的模即可。
唯一分解定理:当40!后,后9位全为0。
vector模拟一维数组:
vector<int>a(n+10,-1e8)
二维:
vector<vector<int> >a(n+10,vector<int>(n+10,-1e8))
三维:
vector<vector<vector<int> > >a(n+10,vector<vector<int> >(n+10,vector<int>(n+10,-1e8)))
set<int>s,lower_bound(s.begin(),s,end(),x)比s.lower_bound(x)慢很多,因为后者调用的是成员函
数,前者是全局函数。例如vector之类没有成员函数的Lower_bound,只有map,multimap,set,multiset
存在。
s.find(x)返回的是迭代器,set的顶部是最大值。
printf(%.2lf)会对小数点2位以后的位进行四舍五入。
vector< vector< int > >f(n,vector< int >())可以用来完成诸如f[i].push_back(x)的操作相当于只是初始化第一维。
multiset中的erase只能删除正向迭代器因此不能删除s.rbegin(),可以用s.end()再–得到可删除的迭代器。