2017年8月7日提高组T1 呵呵
2017-08-07 20:00
155 查看
Description
这天,小A得到了一个序列a[1],a[2]…a
,他想知道有多少个二元组(i,j)满足i!=j且a[i]是a[j]的因数。
Input
第一行有一个正整数n,第二行包含n个整数。
Output
输出一行,表示满足条件的二元组个数。
Sample Input
5
2 4 5 2 6
Sample Output
6
Hint
对于前30%的数据,n,k<=1000.
对于100%的数据,n<=2000000,a[i]<=2000000。
分析:
其实就很简单。我们对于每个数i,如果对答案有贡献,则序列中存在n*i。由于与序列顺序无关,对于每个i都有相同的对数,我们只要求出其中一个数与后面的数有多少个数可以成对,在乘一下就好。把数据可以存在一个桶中。
代码:
这天,小A得到了一个序列a[1],a[2]…a
,他想知道有多少个二元组(i,j)满足i!=j且a[i]是a[j]的因数。
Input
第一行有一个正整数n,第二行包含n个整数。
Output
输出一行,表示满足条件的二元组个数。
Sample Input
5
2 4 5 2 6
Sample Output
6
Hint
对于前30%的数据,n,k<=1000.
对于100%的数据,n<=2000000,a[i]<=2000000。
分析:
其实就很简单。我们对于每个数i,如果对答案有贡献,则序列中存在n*i。由于与序列顺序无关,对于每个i都有相同的对数,我们只要求出其中一个数与后面的数有多少个数可以成对,在乘一下就好。把数据可以存在一个桶中。
代码:
var n,x,e:longint; t,ans:longint; a:array [1..4000001] of longint; i,j:longint; begin readln(e); for i:=1 to e do begin read(x); if x=0 then continue; inc(a[x]); if x>n then n:=x; end; for i:=1 to n do begin if a[i]=0 then continue; j:=i; t:=0; while j<=n do begin t:=t+a[j]; j:=j+i; end; ans:=ans+(t-1)*a[i]; end; writeln(ans); end.
相关文章推荐
- 【SSLGZ 2667】2017年8月7日提高组T1 呵呵
- 2017年8月7日提高组T1 呵呵
- SSL2667 2017年8月7日提高组T1 呵呵
- SSL2668 2017年8月7日提高组T1 根(dfs)
- 2017年8月7日提高组T3 选数
- 2017年8月7日提高组T1 选数
- 初学Flash的积累(一周一总结)提高以后开发速度---呵呵 我记不住这些东东
- 用QQ提问的技巧,用了之后可以提高效率,呵呵。
- 用QQ提问的技巧,用了之后可以提高效率,呵呵。
- 2017年8月7日提高组T2 选数
- 2017年8月7日提高组T1 根
- SSL2669 2017年8月7日提高组T1 选数(dfs)
- 2017年8月7日提高组T1 选数
- 提高cisco路由器安全: 修改telnet端口号
- 提高Web服务器性能
- 简述如何提高单机下服务器的高并发性能
- 蓝桥杯 算法提高 约数个数
- ETL工具与SQL相结合 提高BI项目运行效率?
- 呵呵
- jzoj【NOIP2017提高A组冲刺11.2】失格