线性筛

This commit is contained in:
James 2020-04-25 10:22:20 +08:00
parent b602b04036
commit b318babe9b
18 changed files with 180 additions and 30 deletions

17
1665_chunsu/Readme.md Normal file
View File

@ -0,0 +1,17 @@
# 『入门』(递归专题)纯粹素数
[问题描述]
教学案例,必须使用递归函数完成求解!
  纯粹素数,即一个正整数,它是素数,然后去掉其最高位,剩下的数值还是素数,再去掉余下数值的最高位,其还是素数,重复如此,直至还剩下个位,其还是素数。则满足该条件的原整数即为纯粹素数。
[输入格式]
  一个整数值n10 <= n <= 10^6
[输出格式]
  按从小到大的顺序一行一个输出大于等于10小于等于n之间的所有纯粹素数。
[输入样例]
[输出样例]

View File

@ -0,0 +1 @@
#

16
1665_chunsu/main.cpp Normal file
View File

@ -0,0 +1,16 @@
//weiwancheng
#include <iostream>
using namespace std;
int main()
{
int n,f[10001]={0};
cin>>n;
f[1]=2;
f[2]=3;
f[3]=5;
f[5]=7;
int tou=4,wei=5;
do{
tou++;
}while(tou<wei)
}

BIN
1665_chunsu/main.exe Normal file

Binary file not shown.

0
1665_chunsu/test/in.txt Normal file
View File

0
1665_chunsu/test/in2.txt Normal file
View File

0
1665_chunsu/test/in3.txt Normal file
View File

7
1665_chunsu/test/out.txt Normal file
View File

@ -0,0 +1,7 @@
## z:\Chao\src\Template\test\in.txt
2020/03/14 ÖÜÁù 11:41:28.68
Hello Easy C++ project!
-----------------------------------------------
Process exited after 200 ms with return value 0

View File

@ -1,28 +1 @@
# 【东莞中学2013暑假训练题】Window
题目描述
  给你一个长度为N的数组一个长为K的滑动的窗体从最左移至最右端你只能见到窗口的K个数每次窗体向右移动一位如下表
  
  你的任务是找出窗口在各位置时的max valuemin value。
输入输出格式
输入格式:
  第1行nk。
  第2行长度为n的数组。
输出格式:
  2行第1行每个位置的min value,第2行每个位置的max value。
输入输出样例
输入样例#1
8 3
1 3 -1 -3 5 3 6 7
输出样例#1
-1 -3 -3 -3 3 3
3 3 5 5 6 7
提示信息
  数据范围:
  20% n<=500
  50%: n<=100000
  100%: n<=1000000。
#

View File

@ -1,3 +1,28 @@
# 标题
# 【东莞中学2013暑假训练题】Window
* 内容
题目描述
  给你一个长度为N的数组一个长为K的滑动的窗体从最左移至最右端你只能见到窗口的K个数每次窗体向右移动一位如下表
  
  你的任务是找出窗口在各位置时的max valuemin value。
输入输出格式
输入格式:
  第1行nk。
  第2行长度为n的数组。
输出格式:
  2行第1行每个位置的min value,第2行每个位置的max value。
输入输出样例
输入样例#1
8 3
1 3 -1 -3 5 3 6 7
输出样例#1
-1 -3 -3 -3 3 3
3 3 5 5 6 7
提示信息
  数据范围:
  20% n<=500
  50%: n<=100000
  100%: n<=1000000。

30
lg3383_no.sushu/Readme.md Normal file
View File

@ -0,0 +1,30 @@
# P3383 【模板】线性筛素数
题目背景
本题已更新,从判断素数改为了查询第 kk 小的素数
提示:如果你使用 cin 来读入,建议使用 std::ios::sync_with_stdio(0) 来加速。
题目描述
如题,给定一个范围 nn有 qq 个询问,每次输出第 kk 小的素数。
输入格式
第一行包含两个正整数 n,qn,q分别表示查询的范围和查询的个数。
接下来 qq 行每行一个正整数 kk表示查询第 kk 小的素数。
输出格式
输出 qq 行,每行一个正整数表示答案。
输入输出样例
输入 #1复制
100 5
1
2
3
4
5
输出 #1复制
2
3
5
7
11

View File

@ -0,0 +1 @@
#

34
lg3383_no.sushu/main.cpp Normal file
View File

@ -0,0 +1,34 @@
#include <iostream>
#include<cstdio>
using namespace std;
bool pan[100000001] = { 0 };
int chu[1000001] = { 0 }, now = 0;
//线性筛
void findsu(int n){
for (int i = 2; i <= n; i++) {
if (!pan[i]) {
chu[++now] = i;
}
for (int j = 1; j <= now && i * chu[j] <= n; j++) {
pan[i * chu[j]] = 1;
//重要确保用最大的因数来乘如用6*2=12而避免4*3=12重复计算
if (i % chu[j] == 0) {
break;
}
}
}
}
int main()
{
int n, e;
scanf("%d%d",&n,&e);
findsu(n);//筛出素数
for (int i = 1; i <= e; i++) {
scanf("%d",&n);
printf("%d\n",chu[n]);
}
}

BIN
lg3383_no.sushu/main.exe Normal file

Binary file not shown.

View File

@ -0,0 +1,6 @@
100 5
1
2
3
4
5

View File

@ -0,0 +1,6 @@
100000000 5
1
2
3
4
5

View File

@ -0,0 +1,6 @@
100000 5
1
2
3
4
5

View File

@ -0,0 +1,28 @@
## z:\Chao\src\lg3383_no.sushu\test\in.txt
2020/04/25 ÖÜÁù 10:18:41.40
2
3
5
7
11
-----------------------------------------------
Process exited after 200 ms with return value 0
## z:\Chao\src\lg3383_no.sushu\test\in2.txt
2020/04/25 ÖÜÁù 10:18:41.40
-----------------------------------------------
Process exited after 1520 ms with return value -1073741819
## z:\Chao\src\lg3383_no.sushu\test\in3.txt
2020/04/25 ÖÜÁù 10:18:41.40
2
3
5
7
11
-----------------------------------------------
Process exited after 90 ms with return value 0