将所有人从1编号,第一个人从1报数,每次数到m的人被杀,后面的人再从1报数,依此循环,直到剩下一人。已知最后一人的编号k,求至少有多少人

img

谢谢您!
我的程序是正确的,但是在提交网页时超时了,我想知道怎么可以减少循环或者有另一种思路吗?


#include<iostream>
using namespace std;
int cir(int n,int m)
{
    int p=0;
    for(int i=2;i<=n;i++)
    {
        p=(p+m)%i;
    }
    return p+1;
}
int main()
{
    int m1,k;
    int s=0;
    cin>>m1>>k;
    for(int j=1;;j++)
    {
        s=cir(j,m1);
        if(s==k)
        {
            cout<<j<<endl;
            break;
        }
    }
    return 0;
}

char ch;
cin>>m1>>ch>>k;
输入有个逗号要处理一下