vijosP1359 Superprime

链接:https://vijos.org/p/1359

【思路】

搜索+数学。

很明显的搜索,依次确定每一个数,用参数sum记录dfs即可。

本题的关键在于如何快速判断大素数。

这里素数的判定用到了一个O(sqrt(n))的筛选+试除法,如下:

1、  构造sqrt(n)以内的素数表与素数筛。

2、  对于询问n如果位于sqrt(n)之内则直接查素数筛。

3、  否则,用素数表中的数依次试除。

【代码】

  1. #include<iostream>
  2. #include<cstring>
  3. #include<vector>
  4. #include<cmath>
  5. using namespace std;
  6.  
  7. int n,m,N=;
  8. bool su[];
  9. vector<int> primes;
  10.  
  11. void get_primes(int n) {
  12. memset(su,true,sizeof(su));
  13. su[]=su[]=false;
  14. m=sqrt(N);
  15. for(int i=;i<=m;i++) if(su[i]) {
  16. primes.push_back(i);
  17. for(int j=i*i;j<=m;j+=i) su[j]=false; //pause with m
  18. }
  19. }
  20. inline bool is_prime(int x) {
  21. if(x<=m) return su[x];
  22. int nc=primes.size();
  23. for(int i=;i<nc;i++) if(x%primes[i]==) return false;
  24. return true;
  25. }
  26.  
  27. void dfs(int d,int sum) {
  28. if(d==n) {
  29. cout<<sum<<"\n";
  30. return ;
  31. }
  32. for(int i=;i<=;i++) {
  33. int num=sum*+i;
  34. if(is_prime(num)) dfs(d+,num);
  35. }
  36. }
  37.  
  38. int main() {
  39. cin>>n;
  40. for(int i=;i<n;i++) N *= ;
  41. get_primes(n);
  42. dfs(,);
  43. return ;
  44. }

vijosP1359 Superprime的更多相关文章

  1. 洛谷P1218 [USACO1.5]特殊的质数肋骨 Superprime Rib

    P1218 [USACO1.5]特殊的质数肋骨 Superprime Rib 284通过 425提交 题目提供者该用户不存在 标签USACO 难度普及- 提交  讨论  题解 最新讨论 超时怎么办? ...

  2. Index of super-prime - SGU 116(素数+背包)

    题目大意:素数表2,3,5,7,11.....如果一个素数所在的位置还是素数,那么这个素数就是超级素数,比如3在第2位置,那么3就是超级素数.....现在给你一个数,求出来这个数由最少的超级素数的和组 ...

  3. SGU 106.Index of super-prime

    时间限制:0.25s 空间限制:4M 题目大意:                 在从下标1开始素数表里,下标为素数的素数,称为超级素数(Super-prime),给出一个n(n<=10000) ...

  4. [Swust OJ 799]--Superprime Rib(DFS)

    题目链接:http://acm.swust.edu.cn/problem/799/ Time limit(ms): 1000 Memory limit(kb): 10000   Description ...

  5. sgu 116 Index of super-prime

    题意:用最少的super-prime组成n; 找出所有的super-prime数,只有202个.用完全背包记录能取到n值的最少数量.再找出7要哪些元素. #include <iostream&g ...

  6. 快速切题 sgu116. Index of super-prime bfs+树思想

    116. Index of super-prime time limit per test: 0.25 sec. memory limit per test: 4096 KB Let P1, P2, ...

  7. 素数 + 背包 - SGU 116. Index of super-prime

    Index of super-prime Problem's Link Mean: 如果一个素数所在的位置还是素数,那么这个素数就是超级素数,比如3在第2位置,那么3就是超级素数. 现在给你一个数,求 ...

  8. Vijos——1359 Superprime

    Superprime 描述 农民约翰的母牛总是生产出最好的肋骨.你能通过农民约翰和美国农业部标记在每根肋骨上的数字认出它们. 农民约翰确定他卖给买方的是真正的质数肋骨,是因为从右边开始切下肋骨,每次还 ...

  9. USACO 1.5 Superprime Rib

    Superprime Rib Butchering Farmer John's cows always yields the best prime rib. You can tell prime ri ...

随机推荐

  1. CSS3的position:sticky介绍

    用户的屏幕越来越大,而页面太宽的话会不宜阅读,所以绝大部分网站的主体宽度和之前相比没有太大的变化,于是浏览器中就有越来越多的空白区域,所以你可能注意到很多网站开始在滚动的时候让一部分内容保持可见,比如 ...

  2. Linux查看目录挂载点

    用命令 df 即可 # df /var/lib/ Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda3 135979984 669 ...

  3. 原创:Javascript循环队列类

    需要滚动显示最多一定数量的信息,于弄了个这个 var LeesCircleQueue=function(size) { // 队列数组 var _queue=[]; // 队首索引 var _fron ...

  4. python引入导入自定义模块和外部文件

    参考:http://blog.csdn.net/devil_2009/article/details/15816237 项目中想使用以前的代码,或者什么样的需求致使你需要导入外部的包 如果是web 下 ...

  5. hdu 2222 Keywords Search ac自动机入门

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2222 题意:有N(N <= 10000)个长度不超过50的模式串和一个长度不超过1e6的文本串. ...

  6. 深入浅出分析C#接口的作用

    1.C#接口的作用 :C#接口是一个让很多初学C#者容易迷糊的东西,用起来好像很简单,定义接口,里面包含方法,但没有方法具体实现的代码,然后在继承该接口的类里面要实现接口的所有方法的代码,但没有真正认 ...

  7. qt 5 小练习 纯代码制作自定义按钮

    大家都知道QT设计师中直接拖动的按钮是长方形带有圆角的图案,那我们如何来设置自定义按钮呢 要设计一个按钮,我们必须要知道按钮有什么属性,首先,按钮必须有一个位置 第二,按钮必须有一个名称.还有当我们点 ...

  8. 浏览器九宫格的简单实现 - 蒋宇捷的专栏 - 博客频道 - CSDN.NET

    CSS3 来源:http://blog.csdn.net/hfahe/article/details/6125890#1536434-hi-1-22083-42d97150898b1af15ddaae ...

  9. 实用make最佳实践

    http://www.cnblogs.com/ggjucheng/archive/2011/12/14/2288055.html 一.前言 Make工具最主要也是最基本的功能就是通过makefile文 ...

  10. HDU4521+线段树+dp

    题意:在一个序列中找出最长的某个序列.找出的序列满足题中的条件. 关键:对于 第 i 个位置上的数,要知道与之相隔至少d的位置上的数的大小.可以利用线段树进行统计,查询.更新的时候利用dp的思想. / ...