您现在的位置是:主页 > news > 网站策划怎么写/seo网络推广课程
网站策划怎么写/seo网络推广课程
admin2025/5/25 22:20:09【news】
简介网站策划怎么写,seo网络推广课程,wordpress代码目录结构,室内设计效果图图片题目描述 在大于 111 的自然数中,除了 111 和它本身以外不再有其他因数的数,被称为素数,又叫质数。超级素数是指一个素数,每去掉最后面的一个数字,总能保证剩下的数依然为素数。比如 “373373373” 就是一个超级素数&…
题目描述
在大于 111 的自然数中,除了 111 和它本身以外不再有其他因数的数,被称为素数,又叫质数。超级素数是指一个素数,每去掉最后面的一个数字,总能保证剩下的数依然为素数。比如 “373373373” 就是一个超级素数,去掉个位的 “333” 后,“373737” 依然是素数;继续去掉 “373737” 个位的 “777” 后,“333” 还是素数。
输入格式
输入一个整数 nnn(10≤n≤10810\le n \le 10^810≤n≤108) 。
输出格式
输出一个数,表示所有小于等于 nnn 的超级质因数个数。
输入样例1
30
输出样例1
6
样例1解释
有 2 3 5 7 23 29 共666 个数满足条件
输入样例2
50
输出样例2
8
样例2解释
有2 3 5 7 23 29 31 37 共 88 个数满足条件。
算法思想
暴力枚举(70分)
可以通过线性筛素数法将所有不超过nnn的素数求出,然后枚举每个素数,判断是否符合超级素数的性质。
时间复杂度
O(108)O(10^8)O(108),最终70分,TLE。
DFS
分析超级素数的性质,会发现最高位只能由素数2、3、5、72、3、5、72、3、5、7组成,其余各位只能从是奇数1、3、7、91、3、7、91、3、7、9中选择,因此可以使用DFS构造所有满足性质的超级素数。
代码实现
#include <iostream>
using namespace std;
int ans;
int a[] = {2, 3, 5, 7}, b[] = {1, 3, 7, 9};
int n;bool check(int x)
{if(x == 1) return false;for(int i = 2; i <= x / i; i ++){if(x % i == 0) return false;}return true;
}void dfs(int x)
{if(x > n) return;ans ++;for(int i = 0; i < 4; i ++)if(check(x * 10 + b[i]))dfs(x * 10 + b[i]);
}int main()
{cin >> n;for(int i = 0; i < 4; i ++)dfs(a[i]); cout << ans << endl; return 0;
}