1》
如果a,b互质,只能说明gcd(a,b)==1,而不能说明a为质数,b为质数。
如果用快速幂求逆元,必须保证mas是质数。
如果存在逆元,不一定可以使用快速幂求逆元。
因为存在逆元,只能说明和gcd(a,mas)=1,但是不能说明mas为质数
2》
(1)string x;
1.只可以使用cin输入
2.输入的时候只可以从首地址开始输入,cin>>x。cin>>x+1错误
3.比较str和“pop”是否相等 if(str=="pop)
(2)scanf("%s",str)
1.只可以使用scanf输入
2.输入的时候可以不从首地址开始进行输入,scanf("%s",str+a)
3.scanf("%s",str);比较str和"pop"是否相等
if(str=="pop")错误
只可以使用if(!strcmp(str,"pop"))
strcmp小于-1,等于0,大于1;
3》
采用字符串哈希的时候:
1>注意使用ull
2>定义两个数组都是ull,一个用来记录p^i,一个记录字符串哈希的数值;
3> v[i]=v[i-1]*p+str[i]-'a'+1;//注意为了防止0,00,000,冲突,映射结果一边不会映射为0的位置,;
因此a会映射到1,而不是0。如果是0,那么0,00,000实际就是0,原来的就是a,aa,aaa.映射的结果相等,但是实际上不相等。
4>实际上,如果不使用ull的默认取mod 2^64
可以自己定义一个mod,但是这mod和p实际上会直接影响着,答案是否正确。因为字符串哈希,实际上本身就是一种运气。
按照经验来说,选取p=131或者p=1331,mod=2^64冲突的概率最小。
如果有范围的话,p=131或p=1331,mod取稍微大于范围的一个质数的情况,冲突的概率会最低。
4》
规范一下数组变量的使用:
字符串数组就采用,str
整数数组就采用,v;
bool数组就使用,vis;
数组下标 const int N=1e5//不在使用mas
数字mod就使用 const int mod=1e9+7;
数组模拟图;idx,ne[],n[],h[].初始默认值是-1截至标志,h[i]=-1
浙公网安备 33010602011771号