BZOJ1607

BZOJ 1607
  • 题目

    BZOJ1607

  • 分析

    本题可以暴力的去找每个数的因子,看一下它的因子在序列的出现的次数,再做统计。时间复杂度: O ( n × m ) O(n \times \sqrt{m}) O(n×m ) 洛谷上 A C AC AC B Z O J BZOJ BZOJ 老爷机上就 T L E TLE TLE 了。

    变换思路:

    类似埃氏筛的方法,统计数的倍数出现的次数。注意:去除自己本身的答案。

  • 代码

        int maxn = 0;
    	for (int i = 1; i <= n; i++) {
    		read(a[i]);
    		vis[a[i]]++;
    		maxn = max(maxn, a[i]);
    	}
    	for (int i = 1; i <= maxn; i++) {
    		if (vis[i] == 0) continue;
    		for (int j = i; j <= maxn; j += i) ans[j] += vis[i];
    	}
    	for (int i = 1; i <= n; i++) {
    		printf("%d\n", ans[a[i]] - 1);
    	}
    
  • 题型

埃氏筛思想 o r or or 暴力找因子

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值