0
点赞
收藏
分享

微信扫一扫

Codeforces 111 B

witmy 2022-07-15 阅读 77


​​传送门​​

题目大意

给你次询问,每次给你一个
然后让你输出,这个数中的因子有多少个并没有在这个数的前个数的因子中出现过。

思路

标记前面出现的因子,代表这个是在第个数出现的,这样就可以将复杂度降下来~。

代码

int n,x[maxn],y[maxn];
int a[maxn][300];
map<int,int>mp;
int b[maxn];

int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d%d",&x[i],&y[i]);
int ans=0;
for(int j=1;j*j<=x[i];j++){
if(x[i]%j==0){
if(mp[j]<(i-y[i])) ans++;
if(x[i]/j!=j){
int tmp=x[i]/j;
if(mp[tmp]<(i-y[i])) ans++;
}
mp[j]=i;
mp[x[i]/j]=i;
}
}
printf("%d\n",ans);
}
}


举报

相关推荐

0 条评论