Codeforces Round #774 (Div. 2) Power Board(数学)
链接
题意:给一个n*m的矩阵,每个元素的值是
i
j
i^j
ij,问有多少个不一样的元素
思路:不过这个题为什么可以2200。首先可以看出
4
1
=
2
2
,
4
2
=
2
2
∗
2
4^1=2^2,4^2=2^{2*2}
41=22,42=22∗2,所以思路就是,对每个数字处理他的幂次倍,因为他们的值是一样的,最后有多少个不一样的幂次行就有多少的答案
#include<bits/stdc++.h>
using namespace std;
#define int long long
bool vis[20000010], st[20000010] ;
int cnt, val[105];
signed main()
{
int n, m;
cin >> n >> m;
for (int i = 1; i <= 20; i++) {
for (int j = 1; j <= m; j++) {
if (!st[i * j]) {
st[i * j] = 1;
cnt++;
}
}val[i] = cnt;
}
int ans = 1;
for (int i = 2; i <= n; i++) {
if (vis[i]) continue;
int j = 0, pa = i;
while (pa <= n) {
vis[pa] = 1;
pa *= i;
j++;
} ans += val[j];
}cout << ans ;
return 0;
}