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

洛谷-P3912素数个数题解

P3912 素数个数

题目描述

1 , 2 , ⋯ , N 1,2,\cdots,N 1,2,,N 中素数的个数。

输入格式

一行一个整数 N N N

输出格式

一行一个整数,表示素数的个数。

输入输出样例 #1

输入 #1

10

输出 #1

4

说明/提示

对于 40 % 40\% 40% 的数据, 1 ≤ N ≤ 10 6 1 \le N \le 10^6 1N106

对于 80 % 80\% 80% 的数据, 1 ≤ N ≤ 10 7 1 \le N \le 10^7 1N107

对于 100 % 100\% 100% 的数据, 1 ≤ N ≤ 10 8 1 \le N \le 10^8 1N108

看题目,如果我们没有学过埃氏筛法的话,你一定会这样写:

#include<bits/stdc++.h>
#define int long long
using namespace std;
int N, ans;
bool prime(int t){if(t < 1) return false;for(int i = 2; i < t; i ++){if(t % i == 0) return false;}return true;
}
signed main(){cin >> N;for(int i = 2; i <= N; i ++){if(prime(i)) ans ++;}cout << ans;return 0;
}

对吧,从 1 1 1 一直搞到 N N N,看看哪些是素数,然后就让累加器统计一下,但是呢:在这里插入图片描述
惨不忍睹啊,只拿了20分;

让我们重新看题目,他既然是统计 1 1 1 N N N 之间的素数个数的话,必须要使用埃氏筛法(没学过的点这里)

好,重新编写代码:

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1e8 + 7;
int n, a[N], ans;
void solve(){//听说可以减时间复杂度 cin >> n;a[1] = 1;//1不是质数,标记1 for(int i = 2; i * i <= n; i ++){//开方减复杂度 if(a[i] == 0){//是质数 for(int j = i * 2; j <= n; j += i){//倍数都不是质数 a[j] = 1;//标记 }}}for(int i = 1; i <= n; i ++){if(a[i] == 0) ans ++;//统计 }cout << ans;
}
signed main(){solve();return 0;
}

结果:
在这里插入图片描述
我真是可悲~~~~(>_<)~~~~
无语了。

发现了:long long数组不可以开 10 8 10^8 108 这么大,可以改成bool类型:
在这里插入图片描述
真是太难了,修改了 2 2 2 遍才改好:

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1e8 + 7;
int n, ans;
bool a[N];
void solve(){//听说可以减时间复杂度 cin >> n;a[1] = 1;//1不是质数,标记1 for(int i = 2; i * i <= n; i ++){//开方减复杂度 if(a[i] == 0){//是质数 for(int j = i * 2; j <= n; j += i){//倍数都不是质数 a[j] = 1;//标记 }}}for(int i = 1; i <= n; i ++){if(a[i] == 0) ans ++;//统计 }cout << ans;
}
signed main(){solve();return 0;
}

结语:点个关注再走喵~

数论真是太难了,以后再也不做了(bush
http://www.xdnf.cn/news/10617.html

相关文章:

  • 模型训练的“隐形杀手”——过拟合!全面解析与实用应对方案
  • MySQL中的锁
  • 【nssctf第三题】[NSSCTF 2022 Spring Recruit]easy C
  • 29 C 语言内存管理与多文件编程详解:栈区、全局静态区、static 与 extern 深度解析
  • Codeforces Round 1026 (Div. 2) C. Racing
  • Java内存模型与互斥锁
  • Python打卡训练营Day43
  • 《多状态DP:状态设计与状态转移方程速成指南》​
  • Leetcode 1136. 并行课程
  • MySQL语法练习 - 基础DDL/DML/DQL/DCL练习
  • 监督学习 vs 无监督学习:AI两大学习范式深度解析
  • Java内部类详细教程
  • 06.MySQL数据库操作详解
  • Retrievers检索器+RAG文档助手项目实战
  • 字符串加解密
  • 配置刷新技术
  • 【Python 进阶3】常见的 call 和 forward 区别
  • JavaSE 字符串:深入解析 String、StringBuilder与 StringBuffer
  • 第十章:Next的Seo实践
  • 力扣HOT100之多维动态规划:62. 不同路径
  • C. Basketball Exercise
  • Vue-6-前端框架Vue之基于Plotly.js绘制曲线
  • 3,信号与槽机制
  • BUUCTF[ACTF2020 新生赛]Include 1题解
  • NVM,Node.Js 管理工具
  • 【Delphi】接收windows文件夹中文件拖拽
  • (Python网络爬虫);抓取B站404页面小漫画
  • Python-matplotlib库之核心对象
  • 设计模式——备忘录设计模式(行为型)
  • Kotlin 中 companion object 扩展函数详解