为什么会runtime error?
#include<iostream>
#include<cmath>
#include<cstring>
const int maxn=100010;
using namespace std;
int n,m,cot=0,flag=0;
int a[100500];
int prime[maxn],e[maxn],ans[maxn];
void add(int m){ //加上n-i分解的因数
int li=(int)(sqrt(m)+0.5);
for(int i=2;i<=li;i++){
if(m%i==0){
while(m%i==0){
m/=i;
a[i]++;
}
if(m==1) break;
}
}
if (m!=1) {
a[m]++;
}
}
void minu(int m){ //减去i的因数
int li=(int)(sqrt(m)+0.5);
for(int i=2;i<=li;i++){
if(m%i==0){
while(m%i==0){
m/=i;
a[i]--;
}
if(m==1) break;
}
}
if(m!=1){
a[m]--;
}
}
void udt(int m){ //分解 m
memset(e,0,sizeof(e));
int li=(int)(sqrt(m)+0.5);
cot=0;
for(int i=2;i<=li;i++){
if(m%i==0){
prime[++cot]=i;
while(m%i==0){
m/=i;
e[cot]++;
}
}
if(i>100000) flag=1;
if(m==1) break;
}
if (m!=1) {
prime[++cot]=m;
e[cot]++;
}
}
bool check(){
for(int i=1;i<=cot;i++){
if(a[prime[i]]<e[i]){
return false;
}
}
return true;
}
int main(){
while(cin>>n>>m){
flag=0;
memset(a,0,sizeof(a));
int num=0;
udt(m);
if(flag==1){
cout<<"0"<<endl;
cout<<endl;
continue;
}
for(int i=1;i<n-1;i++){
add(n-i);
minu(i);
if(check()) ans[num++]=i+1;
}
cout<<num<<endl;
for(int i=0;i<num;i++) cout<<ans[i]<<" ";
cout<<endl;
}
return 0;
}