(C)
int a(int*rank,int N){//输出数组中最多N个值的秩
秩[1]=0;
对于(int n=2;n<=n;i++){
整数r=n;
for(int a=1;a<=N/2;a++)
int ro=最大值(秩[a],秩[n-a]);
r=最小值(r,ro%2==0?ro+1:ro);
}
for(int a=1;a*a<=N;a++)
如果(n%a==0&&c(a)+c(n/a)==c(n)){
int ro=最大值(秩[a],秩[n/a]);
r=最小值(r,ro%2==0?ro:ro+1);
}
秩[n]=r;
}
返回秩[N];
}
|