pro:给定三个整数L,R,P求[L,R]区间的整数有多少个是以P为最小因子的。L,R,P<2e9;

sol:

一: 比较快的做法是,用函数的思想递归。

用solve(N,P)表示求1到N有多少数字多少个的最小因子是P;

1,首先P是合数,或者N<P;solve=0;

2,否则,如果P*P>=N;solve=1;

3,solve=N/P-solve(N/P,i);     2<=i<P

由于P主要分布在sqrt(N),而且N每次log级别减小,所以收缩得很快。具体的复杂度我证明不来,但是感觉过程和min25筛差不多。 (62ms

  1. #include<bits/stdc++.h>
  2. #define rep(i,a,b) for(int i=a;i<=b;i++)
  3. using namespace std;
  4. const int maxn=;
  5. bool check(int P)
  6. {
  7. for(int i=;i*i<=P;i++)
  8. if(P%i==) return false;
  9. return true;
  10. }
  11. int solve(int N,int P)
  12. {
  13. if(!check(P)||N<P) return ;
  14. if(N/P<P) return ;
  15. int res=N/P;
  16. rep(i,,P-) res-=solve(N/P,i);
  17. return res;
  18. }
  19. int main()
  20. {
  21. int A,B,P;
  22. scanf("%d%d%d",&A,&B,&P);
  23. printf("%d\n",solve(B,P)-solve(A-,P));
  24. return ;
  25. }

二:当时还不流行min25筛,否则这题大部分人都可以套板子了。我们知道min25的过程其实就是每次可以得到最小素因子为p的数的个数(或者之和),所以改一下板子即可(128ms

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define ll int
  4. const int maxn=;
  5. ll Sqr,vis[maxn],pri[maxn],tot,m,id1[maxn],id2[maxn];
  6. ll g[maxn],w[maxn]; //sp前i个素数之和。
  7. void Sieve(int n)
  8. {
  9. tot=; vis[]=;
  10. for(int i=;i<=n;i++){
  11. if(!vis[i]) pri[++tot]=i;
  12. for(int j=;pri[j]<=n/i;j++){
  13. vis[i*pri[j]]=;
  14. if(i%pri[j]==) break;
  15. }
  16. }
  17. }
  18. bool check(int P)
  19. {
  20. for(int i=;i*i<=P;i++)
  21. if(P%i==) return false;
  22. return true;
  23. }
  24. ll solve(ll n,ll K)
  25. {
  26. if(n<K) return ;
  27. if(!check(K)) return ;
  28. if(K>n/K) return ;
  29. Sqr=sqrt(n); Sieve(Sqr); ll res=; m=;
  30. for(ll i=,j;i<=n;i=j+){
  31. j=n/(n/i); w[++m]=n/i;
  32. if(w[m]<=Sqr) id1[w[m]]=m;
  33. else id2[n/w[m]]=m;
  34. g[m]=w[m]-; //1到n的素数个数,先设为n-1(1不考虑
  35. }
  36. for(int j=;j<=tot;j++){
  37. for(int i=;i<=m&&pri[j]<=w[i]/pri[j];i++){
  38. int k=(w[i]/pri[j]<=Sqr)?id1[w[i]/pri[j]]:id2[n/(w[i]/pri[j])];
  39. g[i]=g[i]-(g[k]-(j-));
  40. if(pri[j]==K&&i==) res+=g[k]-(j-); //K去筛,[1,N]时
  41. }
  42. }
  43. return res+;//加上素数自己
  44. }
  45. int main()
  46. {
  47. int l,r,k;
  48. scanf("%d%d%d",&l,&r,&k);
  49. printf("%d\n",solve(r,k)-solve(l-,k));
  50. return ;
  51. }

CodeForces - 83D:Numbers (数学&递归 - min25筛 )的更多相关文章

  1. Min25 筛与 Powerful Numbers

    Min25 筛与 Powerful Numbers Min25 筛 大喊一声 Min25 NB!!! 这是一个非常神奇的东西,用于求更加普遍的积性函数的前缀和. 比如我们要求 \(\sum_{i=1} ...

  2. [总结] min-25筛

    再不写总结我又会忘掉啊啊啊啊啊啊啊啊啊 这个\(min-25\)筛主要用来求一个积性函数的前缀和,就像这样\[\sum_{i=1}^n f(i)\] 不过这个积性函数要满足两个条件:质数\(p\)的函 ...

  3. min25筛学习总结

    前言 杜教筛学了,顺便把min25筛也学了吧= =刚好多校也有一道题需要补. 下面推荐几篇博客,我之后写一点自己的理解就是了. 传送门1 传送门2 传送门3 这几篇写得都还是挺好的,接下来我就写下自己 ...

  4. min-25筛总结

    怕忘了赶快更一下.就是求积性函数前缀和的. 没有 \(\LaTeX\) 原理 现在你有一个积性函数 f(1)=1 FP(p) FPK(p,k) 首先要求的是前缀和,那就是f(质数)+f(合数)+f(1 ...

  5. Min25 筛学习笔记

    仅仅是 \(min25\) 筛最基本的方法,没有任何推式子的例题.(想了想还是加两道吧qwq) 这里解决的是 \(Luogu\) 那道模板题. min25 基本方法: 最基础的是两个式子: \[G(n ...

  6. LOJ# 572. 「LibreOJ Round #11」Misaka Network 与求和(min25筛,杜教筛,莫比乌斯反演)

    题意 求 \[ \sum_{i = 1}^{n} \sum_{i = 1}^{n} f(\gcd(i, j))^k \pmod {2^{32}} \] 其中 \(f(x)\) 为 \(x\) 的次大质 ...

  7. BZOJ-5244 最大真因数(min25筛)

    题意:一个数的真因数指不包括其本身的所有因数,给定L,R,求这个区间的所有数的最大真因数之和. 思路:min25筛可以求出所有最小因子为p的数的个数,有可以求出最小因子为p的所有数之和. 那么此题就是 ...

  8. loj#6235. 区间素数个数(min25筛)

    题意 题目链接 Sol min25筛的板子题,直接筛出\(g(N, \infty)\)即可 筛的时候有很多trick,比如只存\(\frac{N}{x}\)的值,第二维可以滚动数组滚动掉 #inclu ...

  9. 「学习笔记」Min25筛

    「学习笔记」Min25筛 前言 周指导今天模拟赛五分钟秒第一题,十分钟说第二题是 \(\text{Min25}​\) 筛板子题,要不是第三题出题人数据范围给错了,周指导十五分钟就 \(\text{AK ...

随机推荐

  1. spark 更改日志输出级别

    package com.ideal.test import org.apache.spark.{SparkConf, SparkContext} import org.apache.log4j.{Le ...

  2. mongodb 分组求最大值

    先上代码 db.getCollection("playback").aggregate([ {$match:{"game_record_id":{$in:[68 ...

  3. Spring AOP的常用方法

    转  https://blog.csdn.net/u014745069/article/details/84887765

  4. fineui 模拟右下角弹窗

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat=&qu ...

  5. STL源码剖析——序列式容器#4 Stack & Queue

    Stack stack是一种先进后出(First In Last Out,FILO)的数据结构,它只有一个出口,元素的新增.删除.最顶端访问都在该出口进行,没有其他位置和方法可以存取stack的元素. ...

  6. 全栈项目|小书架|服务器端-NodeJS+Koa2 实现书籍详情接口

    通过上篇文章 全栈项目|小书架|微信小程序-首页水平轮播实现 我们实现了前端(小程序)效果图的展示,这篇文章来介绍服务器端的实现. 书籍详情分析 书籍详情页面如下: 从上图可以分析出详情页面大概有以下 ...

  7. 关于使用jquery form submit出现多次提交的问题

    错误的写法: $(this).submit(function () { $(this).ajaxSubmit({ url: opts.url, type: 'post', dataType: 'jso ...

  8. Python进阶(十六)----面向对象之~封装,多态,鸭子模型,super原理(单继承原理,多继承原理)

    Python进阶(十六)----面向对象之~封装,多态,鸭子模型,super原理(单继承原理,多继承原理) 一丶封装 , 多态 封装:            将一些东西封装到一个地方,你还可以取出来( ...

  9. js基本包装类型及Math对象(八)

    一.基本包装类型[继承于Object类型]1.Number().String().Boolean()引用数据类型[包装类型]分别对应的基本数据类型为number.string.boolean. 2.当 ...

  10. Vue学习之webpack调用第三方loader(十五)

    ---恢复内容开始--- 一.webpack 默认只能打包处理 JS 类型的文件,无法处理 其他的非  JS 类型的文件: 如果非要处理 非 JS 类型的文件,我们需要手动安装一些 合适 第三方 lo ...