超级素数

超级素数

程序名:super.cpp super.in super.out

题目描述:

一个素数,依次从低位去掉一位,二位,……,若所得的各数仍都是素数,则称超级素数。

例如:7331是个4位超级素数,因为7,73,733,7331均为素数. 试求n位数的超级素数: (1)超级素数的个数 (2)所有超级素数之和 (3)最大的超级素数。

输入描述:

输入一个整数n(n<=10)

输出描述:

输出三个整数,分别为超级素数的个数,所有超级素数之和,最大的超级素数;  无解输出-1

样式输入:

4

样式输出:

16

68910

7393

刚看到数据规模约定:1010!!无论是埃拉托斯特尼筛法(O(NloglogN)),还是线性筛法(O(N)),都无法筛出那么多质数用来判断。

然后我很天真的 想把质数筛出来,粘贴到程序里。

然后就产生了几十万行代码:

蛤,无法编译。

再想,发现自己一直在避免试除法(O(sqrt(n))),原因就是它太疯狂了。最坏情况下,1010要试除105次,宽搜1、3、7、9四个数一共有九层,49大概是105不包括已经筛掉的合数肯定会超时。

那如果包括呢???

试一试就知道了。瞬间出答案。竟然如此简单!

 1 #include<iostream>
 2 #include<cstdio>
 3 using namespace std;
 4
 5 long long data[100000], x;
 6 int d[5] = {0, 1, 3, 7, 9};
 7 int n, op=0, cl=4, start=1;
 8 int ans, sum;
 9 bool is_prime(int x){
10     for(int i=2; i*i<=x; i++)
11         if(x % i == 0) return 0;
12     return 1;
13 }
14 int bit(long long x){
15     int ans = 0;
16     while(x){
17         x /= 10;
18         ans++;
19     }
20     return ans;
21 }
22 int main(){
23     cin >> n;
24 //特判
25     if(n > 9){
26         cout << -1 <<"\n";
27         return 0;
28     }
29     data[1] = 2;
30     data[2] = 3;
31     data[3] = 5;
32     data[4] = 7;
33     while(op < cl){
34         op++;
35         for(int i=1; i<=4; i++){
36             x = data[op] * 10 + d[i];
37             if(is_prime(x)){
38                 cl++;
39                 data[cl] = x;
40             }
41         }
42     }
43
44 // find the start position
45     while(bit(data[start]) < n)
46         start++;
47
48     while(bit(data[start]) == n){
49         ans++;
50         sum += data[start];
51         start++;
52     }
53
54     cout << ans <<"\n"<< sum <<"\n"<< data[start-1] <<"\n";
55     return 0;
56 }

原文地址:https://www.cnblogs.com/hnoi/p/10987824.html

时间: 2024-10-23 02:59:51

超级素数的相关文章

超级素数(sprime) (BFS)

问题 G: 超级素数(sprime) 时间限制: 1 Sec  内存限制: 64 MB提交: 47  解决: 11[提交][状态][讨论版] 题目描述 超级素数是指一个素数,每去掉后面一个数字,总能保证剩下的数为质数,例如: 373->37->3 这是一个长为3的超级素数. 输入 输入一个整数n (10≤n≤108). 输出 从小到大输出所有小于等于n的超级素数,每个超级素数之间留一个空格.末尾也有一个空格 样例输入 10 样例输出 2 3 5 7 [分析]通过找规律,发现所求素数中只可能出现

超级素数(sprime)

超级素数(sprime) 题目描述 超级素数是指一个素数,每去掉后面一个数字,总能保证剩下的数为质数,例如:373->37->3这是一个长为3的超级素数. 输入 输入一个整数n (10≤n≤108). 输出 从小到大输出所有小于等于n的超级素数,每个超级素数之间留一个空格.末尾也有一个空格 样例输入 10 样例输出 2 3 5 7 分析:素数生成,第一位是2,3,5,7,以后的可以加1,3,7,9:代码: #include <iostream> #include <cstdi

算法学习——递推之超级素数

算法描述 超级素数定义: m位超级素数本身是素数 最高位开始,去掉一位为m-1位的素数-- 例: 103不是超级素数,去掉最高位的1之后为3,不是有个2位素数,137是一个三位超级素数,去掉最高位1之后为37,37是一个二位素数,去掉3之后为7,7也是一个素数 要求: 输入整数m(1 < m<=10),统计m位超级素数的个数,并输出其中最大的m位超级素数 算法思路 设置一个判断素数的方法 1位素数只有3个,3,5,7,我们可以推测,2位超级素数的个位数只能是3,5,7,没有其他的选择了,同理,

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

题目大意:素数表2,3,5,7,11.....如果一个素数所在的位置还是素数,那么这个素数就是超级素数,比如3在第2位置,那么3就是超级素数.....现在给你一个数,求出来这个数由最少的超级素数的和组成,输出这个超级素数. 分析:因为给的数字并不大,所以直接用完全背包求出来即可. 代码如下: =======================================================================================================

超级质数

题目描述 一个质数如果从个位开始,依次去掉一位数字,两位数字,三位数字......直到只剩一位数字中间所有剩下的数都是质数,则称该质数为一个超级质数.例如:2333是一个质数,因为2333,233,23,2都是质数,所以2333是一个四位超级素数.请你写一个程序,给定一个整数X,求大小小于X的超级质数. 输入输出格式 输入格式: 一行,给出一个整数X(1<=X<=100000000). 输出格式: 第一行,一个整数k,表示X以内超级质数的个数. 第2至k+1行,每行一个整数,输出所有X以内的超

洛谷P2667 超级质数 [2017年6月计划 数论05]

P2667 超级质数 题目背景 背景就是描述,描述就是背景...... 题目描述 一个质数如果从个位开始,依次去掉一位数字,两位数字,三位数字......直到只剩一位数字中间所有剩下的数都是质数,则称该质数为一个超级质数.例如:2333是一个质数,因为2333,233,23,2都是质数,所以2333是一个四位超级素数.请你写一个程序,给定一个整数X,求大小小于X的超级质数. 输入输出格式 输入格式: 一行,给出一个整数X(1<=X<=100000000). 输出格式: 第一行,一个整数k,表示

SGU 116 Index of super-prime 数论+完全背包+输出方案

题目链接:http://acm.sgu.ru/problem.php?contest=0&problem=116 题意好晦涩 给你一个不超过一万的数 问它最少可以用多少个“超级素数”来表示 使“超级素数”之和等于它 如果无法这样表示 输出0 否则 按非降序形式输出方案 数论部分就模板的问题 没什么说的 完全背包方面也很常规 说说[输出方案] 背包九讲的伪码给的是二维dp[]的方法 实际上稍加改动就可以用在一维数组上 用一个rec[]记录dp[]的当前状态是从哪个状态转移而来(即上一个状态) 通过

USACO Section1.5 Superprime Rib 解题报告

sprime解题报告 —— icedream61 博客园(转载请注明出处)------------------------------------------------------------------------------------------------------------------------------------------------[题目] 列出所有N位的超级素数. 所谓超级素数,即指其任意位前缀均为素数.例如7.73.733.7331均为素数,故而7331为超级素数

SGU[116] Index of super-prime

Description 描述 Let P1, P2, … ,PN, … be a sequence of prime numbers. Super-prime number is such a prime number that its current number in prime numbers sequence is a prime number too. For example, 3 is a super-prime number, but 7 is not. Index of supe