D-LCA On N-ary Tree(思维)

在画树时找到一个有趣的数学规律,适用于已知子节点找父节点。
比如:
father=x;(这里初始化)
father=(father+n-2)/n;
当n==2时,循环次数<30,因为 2^30 >10^9。当n>2时肯定小于30,所以肯定不会超时。但是当n==1时,如果用这种方法也能算出来,但是会超时,有更好的方法是直接特判。
代码如下:

#include<cstdio>
using namespace std;
bool ok=0;
int main()
{
    int t,n;
    scanf("%d",&t);
    int z,x,y;
    for(int i=1;i<=t;i++){
        scanf("%d%d%d",&z,&x,&y); 
        int fa=x,fb=y;
        if(z==1){
            if(fa>fb)printf("%d\n",fb);
            else printf("%d\n",fa);
        }
        else{
            while(1){
                 if(fa==fb){
                     if(fa==0){
                         printf("1\n");
                     }
                     else printf("%d\n",fa);
                     break;
                }
                else if(fa>fb){
                    fa=(fa+z-2)/z;
                }
                else if(fb>fa){
                    fb=(fb+z-2)/z;
                }
             }
        }
     }
}