首页 > 其他分享 >abc250_d 250-like Number 题解

abc250_d 250-like Number 题解

时间:2023-04-16 22:56:37浏览次数:54  
标签:10 int 题解 质数 Number 250 include ll leqslant

250-like Number

题意

给定一个整数 \(n\),求有多少小于等于 \(n\) 的满足以下条件的整数 \(k\):

  • \(k\) 可以被表示为 \(k = p \times q^3\),其中 \(p \lt q\),并且 \(p, q\) 均为质数。

数据范围

  • \(1 \leqslant n \leqslant 10^{18}\),\(n\) 是整数。

思路

首先,我们发现这个式子中有一个立方,这个肯定就是突破口,因为 \(p < q\),所以 \(p < q \leqslant 10^6\)。

因为要求 \(p,q\) 均为质数,所以先要筛出所有 \(10^6\) 以内的质数。

根据突破口,我们可以发现枚举 \(q\) 是不会TLE的,那么考虑第一步枚举 \(q\),并且随着 \(q\) 的增大,\(p\) 的取值范围是不会变小的!

那么做法就出来了,先预处理出所有 \(10^6\) 以内的质数,然后用双指针求出答案即可。

复杂度

  • 时间:\(O(V\log\log V + n)\),说实话有点险,不建议在比赛时这么做
  • 空间:\(O(n)\)

Code

点击查看代码
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;
using ll = long long;

const int N = 1e6 + 10;

int f[N];
ll n, ans;
vector<int> v;

void ES () { // 埃氏筛筛出所有质数
  f[1] = 1;
  for (int i = 2; i <= 1e6; i++) {
    if (f[i]) {
      continue;
    }
    v.push_back(i);
    for (int j = 2; i * j <= 1e6; j++) {
      f[i * j] = 1;
    }
  }
}

int main () {
  ios::sync_with_stdio(0), cin.tie(0);
  ES();
  cin >> n;
  for (int i = 1, k = v.size() - 1; i < v.size(); i++) { // 枚举 q, 双指针求答案
    ll j = 1ll * v[i] * v[i] * v[i]; // q 的立方
    if (j > n) { // 超出范围
      break;
    }
    for (; k >= 0 && 1ll * v[k] * j > n; k--) { // 移动 p 的范围
    }
    ans += min(i, k + 1); // 求答案,且 p 不能超过 q
  }
  cout << ans;
  return 0;
}

标签:10,int,题解,质数,Number,250,include,ll,leqslant
From: https://www.cnblogs.com/lw0-blog/p/17324111.html

相关文章

  • Minimum Number of Visited Cells in a Grid
    MinimumNumberofVisitedCellsinaGridYouaregivena0-indexed mxn integermatrix grid .Yourinitialpositionisatthetop-left cell (0,0).Startingfromthecell (i,j),youcanmovetooneofthefollowingcells:Cells (i,k) with j<k......
  • AT_agc003_e 题解
    题目链接神仙题,我会把我自己思考的过程一步步写出来。初看这题时感觉没什么思路,所以随便算了点东西。很容易发现如果对于一个$i$,$q_i\geqq_{i+1}$,那么$q_i$就没有意义,每次把元素放进来时先把头部比它大的都弹走,再把它放进去,设处理完的size为cnt。然后就是这道题的精髓所......
  • Atcoder题解:Agc002_f
    我们可以把这个理解成一种类似卡塔兰数的形式,我们发现,被安排的\(0\)球总数\(i\)和已经出现的颜色种数\(j\)在任意时刻都必须满足\(i\gej\)。然后就可以\(dp\)了,我们每次钦定下一个转移的球是某种颜色。如果下一个转移的球不是\(0\),那么我们就一次性把后面所有这种颜色......
  • Atcoder题解:Agc004_e
    \[吓死我了,还以为写了半天的被自己删掉了\]\[但是\text{Ctrl+S}会保存草稿啊\]\[以后一定要保留这个好习惯\]第一步转化题意,我们把“所有机器人移动”转化成“出口带着边框移动”,而在出口运动过程中超出边框的机器人,就“死”了。然后我们发现,出口运动过程中,假设出口目前走到......
  • js 传递汉字 乱码_JavaScript 字符串反转乱码问题解决
    https://blog.csdn.net/weixin_36483301/article/details/113451892emoji表情和非常用字实际解决中文编码问题,可以通过解码解决js中使用decodeURL即可解决......
  • Atcoder题解:Agc013_e
    我们考虑转化题意,一个合法的将\(1\simN\)划分成长度依次为\(a_1,a_2,\cdotsa_k\)的小区间,对答案的贡献为\(a_1^2a_2^2\cdotsa_k^2\)。化贡献为方案数,我们在每个长度为\(a_i\)的小区间内放置两个独立的标记,每个合法的划分方案对放置标记方案种数的贡献恰好是其对最终答......
  • CF题解
    D.ABGraph2000构造https://codeforces.com/problemset/problem/1481/D题解:由于只有两种边,我们可以枚举较小结构的特性并循环来构造整体解。对于任意两个点,[u->v,v->u]只有4种情况,对于[1,1],[0,0]直接得解,可以循环这个环来构造回文,否则[1,0],[0,1],注意到当所需回文为odd长时,......
  • vscode number of cursors limited to 10000 bug All In One
    vscodenumberofcursorslimitedto10000bugAllInOnevscode全局替换光标限制最多10000个❌demos$manopenssl>man-openssl.md#全选"替换,报错提示信息❌#❌$openssl--version#✅$opensslversionLibreSSL3.3.6(......
  • abc249_f Ignore Operations 题解
    IgnoreOperations题意Takahashi有一个整数\(x\),初始\(x=0\)。有\(n\)次操作。第\(i\)次操作用两个整数\(t_i,y_i\)描述:如果\(t_i=1\),将整数\(x\)替换为\(y_i\)。如果\(t_i=2\),将整数\(x\)替换为\(x+y_i\)。Takahashi可以跳过其中至多\(K\)......
  • TJOI 2015 概率论 题解
    TJOI2015概率论题解题意求\(n\)个点随机生成的有根二叉树(所有互不同构的二叉树出现情况等概率)的叶子节点数的期望值。题解70答案显然是\(\dfrac{g(n)}{f(n)}\),\(g(n)\)是\(n\)个点为所有二叉树的叶子总数,\(f(n)\)是\(n\)个点能生成的二叉树数。一棵树可以用左......