题目:

题意:给出一个序列a1,⋯,ana1,⋯,an。fac(l,r)fac(l,r)为mul(l,r)mul(l,r)中不同质因数的个数。

请计算:

                ∑i=1n∑j=infac(l,r)
思路:求质因数的贡献度,我们可以定义一个二维vector pos[i][k]=p表示当前质因数i在p位置出现k次那么该因子的贡献度为(n-p+1)*p,
           因为可能会重复计算的,那么我们只要减去上一个位置出现i的情况,那么每一个质因子的贡献度为(n-pos[i][k]+1)*(pos[i][k]-pos[i][k-1];
           有两种实现一种直接质数分解,大概跑了800ms,用一个欧拉筛进行打表优化跑了400ms。

  1 //#include<bits/stdc++.h>
2 #include<time.h>
3 #include <set>
4 #include <map>
5 #include <stack>
6 #include <cmath>
7 #include <queue>
8 #include <cstdio>
9 #include <cstring>
10 #include <string>
11 #include <vector>
12 #include <cstring>
13 #include <iostream>
14 #include <algorithm>
15 #include <list>
16 using namespace std;
17 #define eps 1e-10
18 #define PI acos(-1.0)
19 #define lowbit(x) ((x)&(-x))
20 #define zero(x) (((x)>0?(x):-(x))<eps)
21 #define mem(s,n) memset(s,n,sizeof s);
22 #define ios {ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);}
23 typedef long long ll;
24 typedef unsigned long long ull;
25 const int maxn=1e6+5;
26 const int Inf=0x7f7f7f7f;
27 const ll Mod=1e9+7;
28 const int N=3e3+5;
29 bool isPowerOfTwo(int n) { return n > 0 && (n & (n - 1)) == 0; }//判断一个数是不是 2 的正整数次幂
30 int modPowerOfTwo(int x, int mod) { return x & (mod - 1); }//对 2 的非负整数次幂取模
31 int getBit(int a, int b) { return (a >> b) & 1; }// 获取 a 的第 b 位,最低位编号为 0
32 int Max(int a, int b) { return b & ((a - b) >> 31) | a & (~(a - b) >> 31); }// 如果 a>=b,(a-b)>>31 为 0,否则为 -1
33 int Min(int a, int b) { return a & ((a - b) >> 31) | b & (~(a - b) >> 31); }
34 ll gcd(ll a, ll b) {return b ? gcd(b, a % b) : a;}
35 ll lcm(ll a, ll b) {return a / gcd(a, b) * b;}
36 int Abs(int n) {
37 return (n ^ (n >> 31)) - (n >> 31);
38 /* n>>31 取得 n 的符号,若 n 为正数,n>>31 等于 0,若 n 为负数,n>>31 等于 -1
39 若 n 为正数 n^0=n, 数不变,若 n 为负数有 n^(-1)
40 需要计算 n 和 -1 的补码,然后进行异或运算,
41 结果 n 变号并且为 n 的绝对值减 1,再减去 -1 就是绝对值 */
42 }
43 ll binpow(ll a, ll b,ll c) {
44 ll res = 1;
45 while (b > 0) {
46 if (b & 1) res = res * a%c;
47 a = a * a%c;
48 b >>= 1;
49 }
50 return res%c;
51 }
52 void extend_gcd(ll a,ll b,ll &x,ll &y)
53 {
54 if(b==0) {
55 x=1,y=0;
56 return;
57 }
58 extend_gcd(b,a%b,x,y);
59 ll tmp=x;
60 x=y;
61 y=tmp-(a/b)*y;
62 }
63 ll mod_inverse(ll a,ll m)
64 {
65 ll x,y;
66 extend_gcd(a,m,x,y);
67 return (m+x%m)%m;
68 }
69 ll eulor(ll x)
70 {
71 ll cnt=x;
72 ll ma=sqrt(x);
73 for(int i=2;i<=ma;i++)
74 {
75 if(x%i==0) cnt=cnt/i*(i-1);
76 while(x%i==0) x/=i;
77 }
78 if(x>1) cnt=cnt/x*(x-1);
79 return cnt;
80 }
81 int n,a[maxn];
82 vector<int>pos[maxn];
83 int cnt=0;
84 bool isprime[maxn];
85 int prime[maxn];
86 void judge()
87 {
88 cnt=0;
89 mem(isprime,1);
90 isprime[1]=0;
91 for(int i=2;i<maxn;i++)
92 {
93 if(isprime[i])
94 prime[cnt++]=i;
95 for(int j=0;j<cnt&&(i*prime[j])<maxn;j++)
96 {
97 isprime[i*prime[j]]=0;
98 if(i%prime[j]==0) break;
99 }
100 }
101 }
102 void dec(int p)
103 {
104 int n=a[p];
105 for(int i=0;i<cnt&&prime[i]*prime[i]<=n;i++)
106 {
107 if(n%prime[i]==0)
108 {
109 pos[prime[i]].push_back(p);
110 while(n%prime[i]==0) n/=prime[i];
111 }
112 }
113 if(n>1) pos[n].push_back(p);
114 }
115 void dec_(int p)
116 {
117 int n=a[p];
118 for(int i=2;i*i<=n;i++)
119 {
120 if(n%i==0)
121 {
122 pos[i].push_back(p);
123 while(n%i==0) n/=i;
124 }
125 }
126 if(n>1) pos[n].push_back(p);
127 }
128 int main()
129 {
130 judge();
131 for(int i=0;i<cnt;i++) pos[prime[i]].push_back(0);
132 scanf("%d",&n);
133 for(int i=1;i<=n;i++)
134 {
135 scanf("%d",&a[i]);
136 dec(i);
137 }
138 ll ans=0;
139 for(int i=0;i<cnt;i++)
140 {
141 for(std::size_t k=1;k<pos[prime[i]].size();k++)
142 {
143 ans+=(ll)(n-pos[prime[i]][k]+1)*(pos[prime[i]][k]-pos[prime[i]][k-1]);
144 }
145 }
146 printf("%lld\n",ans);
147 return 0;
148 }
 

最新文章

  1. Java RMI之HelloWorld篇
  2. 一个防止误删MSSQL数据库的方法
  3. OpenCASCADE Quaternion
  4. CVEH项目观察与思考
  5. ios开发学习笔记(这里一定有你想要的东西,全部免费)
  6. hdu 4223
  7. PHP安装环境,服务器不支持curl_exec的解决办法
  8. 视听说加速器--AHK辅助工具
  9. 深入理解-HashMap
  10. riot.js教程【四】Mixins、HTML内嵌表达式
  11. Java作业-集合
  12. localhost,127.x.x.x和 0.0.0.0区别
  13. Newtonsoft.Json输出Json时动态忽略属性
  14. CSS margin属性取值
  15. DBA-mysql-授权
  16. [Android] 压缩图片并保存
  17. Custom Settings.in 配置信息收集
  18. 20155314 2016-2017-2 《Java程序设计》实验一 Java开发环境的熟悉(macOS + IDEA)
  19. msfvenom生成linux后门
  20. (C#)设计模式之装饰模式

热门文章

  1. JVM升华篇
  2. spring boot集成mybatis只剩两个sql 并提示 Cannot obtain primary key information from the database, generated objects may be incomplete
  3. 全球最好 css3 website
  4. Web 安全 &amp; cookies &amp; HttpOnly
  5. js Memory Management
  6. Arctic Code Vault Contributor
  7. how to close macos eject icon from menu bar
  8. privacy policy 隐私政策
  9. 11月16日NGK公链第13期官方快讯!
  10. BGV再掀DeFi投资热潮,NGK全球启动大会圆满落幕