1. 求两个数的最大公约数: 辗转相除法
int gcd(int x,int y){
if(y==0)
return x;
else
return gcd(y,x%y);
}
void f(int x){
while(x>1) {
for(int i=2;i<x;++i){
if(x%i==0) {
cout<<i<<endl;
x=x/i;
break;
}
}
}
}
3.next数组的求解方法:
next数组下标从1开始计算
next[1] 肯定是 0
next[2] 肯定是 1
next[n] 的情况,将前面n-1个字符,计算从首尾开始组成最大的相同子串的长度,如果找到,那么next值是该长度加1,否则next值是1。
举例
next[6]的计算,字符串第六位是
a ,( ababa
a ababaa)
将前面的5个字符,从头尾开始取4个组成子串比较,如果不相等,则从首尾取3个字符组成子串继续比较,并以此类推, 如果一直比较到最后一个字符都不相等,那么该next值为1。
4个字符的情况:abab : baba
3个字符的情况:aba : aba 此时相等,那么next[6] = 3+1 = 4
4.n个数进栈,可能的出栈顺序有多少种?
卡塔兰数,