比赛时用了极其暴力的方法,赛后一看发觉自己太挫了……
主要是没想到可以这样枚举因数
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int mp[100050];
int main ()
{
int n,x,y;
memset(mp,-1,sizeof(mp));
scanf("%d",&n);
for(int i=1;i<=n;++i)
{
scanf("%d%d",&x,&y);
int ans=0;
for(int j=1;j*j<=x;++j)
if(x%j==0)
{
if(i-y>mp[j]) ans++;mp[j]=i;
if(j*j==x) continue;
if(i-y>mp[x/j]) ans++;mp[x/j]=i;
}
printf("%d\n",ans);
}
return 0;
}