约瑟夫环P8671的问题

为什么这个代码提交会运行超时(P8671 [蓝桥杯 2018 国 AC] 约瑟夫环)
int main()
{

    int a[1000001]={0};
int n,m;
cin>>n>>m;
int t=0;
int k=-1;
while(t<n-1)
{
    int i=0;
    while(i1)%n;
        if(a[k]==0)
        {
            i++;
            if(i==m)
            {
                a[k]=-1;
                t++;
            }
        }
    }
}
for(int i=0;i<n;i++)
{
    if(a[i]==0)
    {
        printf("%d\n",i+1);
        break;
    }
}
return 0;

}

用循环链表

数组开的太大了: int a[1000001]={0}; 如果一定要这么大,把这句放到main()函数前面定义。