当前位置: 首页 > news >正文

c++6级题之筛选法求质数

第1题 质数个数-一般做法(程序填空)

时限:1s空间:256m

题目描述

输入n,输出1~n以内的质数的个数。(n<=1000)

挖空的代码

#include<bits/stdc++.h>

using namespace std;

int main()

{

int n,s=0;

cin>>n;

for(int i=2;i<=n;i++) //质数是从2开始算

{

int flag=1; //标记默认1,表示是质数

for(int j=2;j*j<=i;j++)

if(

) //如果有因子

flag=0; //标记变成0

if(flag) //标记没有变成0,表示没有其他因子

s++; //表示是质数,质数数量增加1

}

cout<<s;

return 0;

}

输入格式

输出格式

输入/输出例子1

输入:

10

输出:

4

标签

暂未设置关联标签

知识点

暂未设置关联知识点

题解

第1空

i%j==0

第2题 质数个数-自定义函数(程序填空)

时限:1s空间:256m

题目描述

输入n,输出1~n以内的质数的个数。(n<=1000)

挖空的代码

#include<bits/stdc++.h>

using namespace std;

bool zs(int x) //判断是否质数的函数

{

for(int i=2;i*i<=x;i++)

if(

)

return false; //如果有因子,就不是质数

return true;

}

int main()

{

int n,s=0;

cin>>n;

for(int i=2;i<=n;i++)

if(

)s++;

cout<<s;

return 0;

}

输入格式

输出格式

输入/输出例子1

输入:

10

输出:

4

标签

暂未设置关联标签

知识点

暂未设置关联知识点

题解

第1空x%i==0
第2空zs(i)==1

第3题 质数个数-筛选法(程序填空)

时限:1s空间:256m

题目描述

输入n,输出1~n以内的质数的个数。(n<=1000)

挖空的代码

#include<bits/stdc++.h>

using namespace std;

bool a[1002]; //数组数值为零,默认都是素数

int main()

{

int n,s=0;

cin>>n;

for(int i=2;i<=1000;i++)

{

if(

)//如果是素数

for(int j=i+i;j<=1000;

) //将他的倍数记为合数

a[j]=i; //标记不为零,表示不是素数

}

for(int i=2;i<=n;i++)

if(a[i]==0) //如果是素数

s++;

cout<<s;

return 0;

}

输入格式

输出格式

输入/输出例子1

输入:

10

输出:

4

标签

暂未设置关联标签

知识点

暂未设置关联知识点

题解

第1空a[i]==0
第2空j+=i

第4题 质数个数-筛选法优化(程序填空)

时限:1s空间:256m

题目描述

输入n,输出1~n以内的质数的个数。(n<=1000)

挖空的代码

#include<bits/stdc++.h>

using namespace std;

bool a[1002];

int main()

{

int n,s=0;

cin>>n;

for(int i=2;

;i++) // 去除不必要的计算

{

if(a[i]==0)

for(int j=i+i;j<=1000;j+=i)

a[j]=i;

}

for(int i=2;i<=n;i++)

if(a[i]==0)

s++;

cout<<s;

return 0;

}

输入格式

输出格式

输入/输出例子1

输入:

10

输出:

4

标签

暂未设置关联标签

知识点

暂未设置关联知识点

题解

第1空i<=n

第5题 数学问题(noip2007mn)(程序填空)

时限:1s空间:256m

题目描述

在一个渺无人烟的荒岛上待了XX年之后,小z基本上啥都不会了。所以,当小y告诉他任何一个大于等于4的偶数都能表示成两个质数的和这个事实的时候,小z根本不相信!小z现在想找出一些反例,你能帮助他吗?

挖空的代码

#include using namespace std; int n,x,k[1000005]; int date() { for(int i=2;i<=1000000;i++) //做素数表 k[i]=1; for(int i=2;i<=1000;i++) for(int j=i+i;j<=1000000;j+=i) k[j]=0; } int main() { date(); cin>>n; for(int i=1;i<=n;i++) { cin>>x; int flag=1; for(int j=2;j+j<=x;j++) //x的后一半已经在前一半那时试过,不用重复 if( $#_%$ && $#_%$) //两个加数都是质数,就输出 { cout<

输入格式

输入文件第一行为一个整数n(1<=n<=50)
接下来有n行,每行包含一个整数m。(3<=m<=1000000)

输出格式

输出文件共n行,每行对应于每一个m,如果m不能表示成两个质数的和,则输出“NO WAY!”;否则输出一种方案。如果有多种可行方案,输出两个质数的差最大的那一种。

输入/输出例子1

输入:

2

10

11

输出:

10=3+7

NO WAY!

标签

暂未设置关联标签

知识点

暂未设置关联知识点

题解

第1空k[j]==1
第2空k[x-j]==1
第6题 阶乘因子(yinzi) 查看测评数据信息

桐桐刚刚学习了自然数N的阶乘(N!):被定义成从1到N的所有整数的乘积。例如5!=5*4*3*2*1=120,随着数N的增大,N!增长的非常快,5!=120,10!=3628800。桐桐想到了一种方法来列举那么大的数:不是直接列出该数,而是按照顺序列举出该数中各个质数因子出现的次数,如825可描述为(0 1 2 0 1),意思是对825分解质因数,这些质数因子中有0个2,1个3,2个5,0个7,1个11。请你编一个程序,读入N值,帮助桐桐按顺序输出N!所包含的质数因子的个数。

输入格式

只包含1个数N(2<=N<=100000)

输出格式

一个N!中所包含的质数因子的个数(从最小的质数开始)的序列,数与数之间用一个空格隔开。

输入/输出例子1

输入:

53

输出:

49 23 12 8 4 4 3 2 2 1 1 1 1 1 1 1

样例解释

题解

#include<bits/stdc++.h>
using namespace std;
int n,a[1000005],s,t[1000005];
const int N=1e5+5;
bool A[N];
int main(){
cin>>n;
for(int i=2;i<=sqrt(n);i++){
if(A[i]==0)
for(int j=i+i;j<=n;j+=i)
A[j]=1;
}
for(int i=2;i<=n;i++){
if(A[i]==0)t[++s]=i;
}
for(int i=2;i<=n;i++){
if(A[i]==0)a[i]++;
else{
int p=i;
for(int j=1;j<=s;j++){
while(p%t[j]==0){
p=p/t[j];
a[t[j]]++;
}
if(p==1)break;
}
}
}
for(int i=1;i<=s;i++){
cout<<a[t[i]]<<" ";
}
return 0;
}

第7题 统计素数(pcount) 查看测评数据信息

桐桐想统计某个区间范围里的素数,例如,A=2,B=10,则A和B之间(包括A、B)素数一共有4个,分别为:2,3,5,7。现在桐桐给出N个区间范围,问每个区间有多少个素数。请你帮助她统计一下。

输入格式

第一行一个整数 N(1<=N<=10^5);
后有N行,每行两个整数A B(1<=A<=B<=10^6),用空格隔开,表示一个区间范围。

输出格式

共N行,每行一个整数,对应区间范围的素数个数。

输入/输出例子1

输入:

2 2 8 1 13

输出:

4

6

样例解释

题解

#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
long long a[N],x,y,sum,n;
bool ss(long long cs){
long long b,s=0;
if(cs<=1){
return 0;
}
for(int i=2;i*i<=cs;i++){
if(cs%i==0){
return 0;
}
}
return 1;
}
void f(){
for(int i=1;i<=1e6;i++){
long long ans=0;
if(ss(i)) ans++;
a[i]=a[i-1]+ans;
}
}
int main(){
f();
cin>>n;
for(int i=1;i<=n;i++){
scanf("%d %d",&x,&y);
printf("%d\n",a[y]-a[x-1]);
}
return 0;
}

第8题 单纯质因数(pprim)(nhoi2014小学甲组) 查看测评数据信息

读五年级的楠楠刚学完了质数、合数、因数、质因数等概念。
他还知道了每个合数都可以写成几个质数相乘的形式,其中每个质数都是这个合数的因数,叫做这个合数的质因数.把一个合数用质因数相乘的形式表示出来,叫做分解质因数.
聪明爱动脑筋的楠楠突然对具有互不相同的质因数的合数产生了兴趣。例如:30=2*3*5,它有互不相同的质因数;70=2*5*7,它也有互不相同的质因数。若一个合数中所有的质因数互不相同,则把它称之为具有单纯质因数的合数。他想知道还有哪些数是单纯质因数的合数。
你现在要帮楠楠解决的问题是:已知N,依次输出N以内所有具有单纯质因数的合数。

输入格式

输入数据只一个整数N(10<=N<=100000)。

输出格式

依次输出N以内所有具有单纯质因数的合数。

输入/输出例子1

输入:

12

输出:

6 10

样例解释

题解

#include<bits/stdc++.h>
using namespace std;
int n,a[1000005],s,t[1000005],y,x;
const int N=1e5+5;
bool A[N];
int main(){
cin>>n;
for(int i=2;i<=sqrt(n);i++){
if(A[i]==0)
for(int j=i+i;j<=n;j+=i)
A[j]=1;
}
for(int i=2;i<=n;i++){
if(A[i]==0)t[++s]=i;
}
for(int i=2;i<=n;i++){
if(A[i]==0){

}
else{
int p=i,l=1;
for(int j=1;j<=s;j++){
y=0;
while(p%t[j]==0){
p=p/t[j];
y++;
if(y>1){
l=0;
break;
}
}
if(p==1)break;
if(l==0)break;
}
if(l==1){
cout<<i<<" ";
}
}
}
return 0;
}

http://www.jsqmd.com/news/825168/

相关文章:

  • 基于CircuitPython与BLE HID打造自定义无线键盘:从硬件到代码全解析
  • 2026年5月股权纠纷律师上榜推荐:专业精通,靠谱破局 - 外贸老黄
  • 如何详细理解 Git 工作原理?
  • MySQL实现跨库在线迁移的方法_利用Binlog实时数据同步工具
  • Mali-G625 GPU性能计数器解析与移动图形优化
  • HTML 教程
  • 开源创富的三大支柱:技术、流量与商业化的完美结合
  • 室内移动机器人混合路径规划【附代码】
  • 2026年近期厦门极压齿轮油服务商综合实力推荐 - 2026年企业推荐榜
  • 基于ESP32与I2S的3D打印蓝牙音箱:从硬件设计到软件实现全解析
  • 从源码到应用:VTK编译与配置全流程实战
  • MySQL UPDATE 条件升级导致的事故
  • 控制理论实践:从PID到MPC的Python实现与仿真调试
  • Redis怎样节省海量状态存储内存_利用Bitmap结构替代传统String存储
  • 基于智能体建模的善良世界模拟器:从Python实现到社会计算实验
  • 【场景生成与研究】考虑时序相关性MC的场景生成与削减研究(Matlab代码实现)
  • 为Circuit Playground设计3D打印保护外壳:从建模到组装的完整指南
  • 别再只会用FFT了!用Matlab的spectrogram函数5分钟搞定信号时频分析(附完整代码)
  • Go语言实现轻量级双向文件同步工具clawsync配置与实战
  • 十亿级会员系统架构演进:ES+Redis+MySQL混合存储实战
  • 未来主义提示词失效预警清单(2024Q3更新):19个高频“伪未来感”词汇及替代方案,附官方语义权重分析报告
  • 液冷、VC与金刚石铜:访华催熟的三大散热赛道
  • 数字电路入门:从二进制、逻辑门到74系列芯片动手实验
  • 某SUV悬架非线性平顺性分析与优化【附代码】
  • Dify集成MCP插件:标准化AI应用与外部工具连接
  • C#怎么操作HTTP请求头 C#如何用HttpClient设置和读取请求头响应头和User-Agent【网络】
  • 从技能到语言化技能:构建可描述、可协作的能力体系
  • 3步解放暗黑2存档:Diablo Edit2角色编辑器完全指南
  • 基于Arduino的红外收发器板:从原理到实践的万能遥控中枢制作
  • 视频图片去水印软件VSR