竞赛课第九周(埃式筛法,矩阵乘法)

server/2024/9/25 10:38:19/

1.埃式筛法:求区间[2, n]内所有的素数

【参考代码】

#include <bits/stdc++.h>
using namespace std;const int N = 1e5;
vector<int> prime;
bool visit[N];int main()
{int n;cin>>n;memset(visit, false, sizeof(visit));for(int i=2; i<=sqrt(n); i++){if(visit[i] != true) //i是素数{for(int j=i*i; j<=n; j += i) //原来是2i。优化后i*i。i=5时,2*5 3*5 4*5已经在前面i=2,3,4筛过了{visit[j] = true; //i*2,3,4,5...都不是素数}}}//通过visit数组记录素数for(int i=2; i<=n; i++){if(visit[i] != true) //i是素数{prime.push_back(i);}}for(int i=0; i<prime.size(); i+=2){cout << prime[i] << ' ' << prime[i+1] << endl;}return 0;
}

【测试结果】

2.求第一亿个Fibonacci数

 【参考代码】

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod = 1000000007;struct matrix{ll a[2][2];
};matrix start;
matrix result;//(Fn+1) = (1, 1)^n * (F1)
//(Fn  )   (1, 0)  	  (F0)//矩阵乘法
matrix matrix_multiplication(matrix matrix1, matrix matrix2)
{matrix temporary;temporary.a[0][0] = (matrix1.a[0][0] * matrix2.a[0][0] + matrix1.a[1][0] * matrix2.a[0][1]) % mod;temporary.a[0][1] = (matrix1.a[0][0] * matrix2.a[0][1] + matrix1.a[0][1] * matrix2.a[1][1]) % mod;temporary.a[1][0] = (matrix1.a[0][0] * matrix2.a[1][0] + matrix1.a[0][1] * matrix2.a[1][1]) % mod;temporary.a[1][1] = (matrix1.a[1][0] * matrix2.a[0][1] + matrix1.a[1][1] * matrix2.a[1][1]) % mod;return temporary;
}//矩阵快速幂
void fastpow(int n)
{while(n){if(n & 1) //位运算,最后一位是否为1result = matrix_multiplication(start, result);start = matrix_multiplication(start, start);n = n >> 1; //右移一位}
}int main() //计算第1亿个Fibonacci数
{int n = 1e8; //一亿start.a[0][0] = start.a[0][1] = start.a[1][0] = 1, start.a[1][1] = 0;//(1, 0)//(0, 1)result.a[0][0] = result.a[1][1] = 1, result.a[1][0] = result.a[0][1] = 0;fastpow(n);
// 	cout << result.a[0][0] % mod << endl;
// 	cout << result.a[0][1] % mod << endl;cout << result.a[1][0] % mod << endl;
// 	cout << result.a[1][1] % mod << endl;return 0;
}
//100000000
//908460138

【输出结果】

由于答案是一个极大的数,我们取最后9位输出

908460138


http://www.ppmy.cn/server/23695.html

相关文章

Linux快速安装Nginx和重新添加模块

目录 一、Nginx快速安装1、下载Nginx2、配置Nginx模块 二、Ngnix重新编译和安装模块 一、Nginx快速安装 1、下载Nginx 直接进入Nginx官网下载Linux最新稳定版本&#xff0c;我之前下载的版本是1.23.0。 2、配置Nginx模块 下载完后我把源码压缩文件解压放在/opt/appl/nginx…

Python多元非线性回归及绘图

Python多元非线性回归及绘图 文章目录 Python多元非线性回归及绘图部分数据截图代码逻辑导入所需库和模块定义非线性模型函数设置数据源和变量非线性回归与参数估计计算拟合优度指标和均方根误差构建拟合公式字符串绘制三维散点图和拟合曲面 完整代码部分结果总结参考 在数字地…

MATLAB初学者入门(23)—— 旅行商问题(TSP)优化

旅行商问题&#xff08;TSP, Traveling Salesman Problem&#xff09;是一个经典的优化问题&#xff0c;要求找到一个最短的路线&#xff0c;使得旅行商从一个城市出发&#xff0c;经过所有城市一次后&#xff0c;回到原出发点。这是一个NP难问题&#xff0c;在数学优化和计算机…

如何快速申请SSL证书实现HTTPS访问?

申请SSL证书最简单的方法通常涉及以下几个步骤&#xff0c;尽量简化了操作流程和所需专业知识&#xff1a; 步骤一&#xff1a;选择适合的SSL证书类型 根据您的网站需求&#xff0c;选择最基础的域名验证型&#xff08;DV SSL&#xff09;证书&#xff0c;它通常只需验证域名所…

Vue 3 快速上手指南(第二期)

&#x1f4da; Vue 3 快速上手指南 在本文中&#xff0c;我将介绍 Vue 3 的基础知识&#xff0c;我们将了解 1.setup &#x1f4da; 如果你想深入学习 Vue 3&#xff0c;建议阅读官方文档并尝试更复杂的示例和项目。 &#x1f449; 可以通过以下链接访问 Vue 3 官方文档&#x…

【GitHub】如何在github上提交PR(Pull Request) + 多个pr同时提交、互不干扰

【GitHub】如何在github上提交PR(Pull Request 写在最前面1. 准备工作1.1 注册 GitHub 账号1.2 了解 Git 基础1.3 找到一个项目 2. 创建你的 PR2.1 Fork 和克隆仓库2.2 创建一个新的分支2.3 进行更改2.4 推送更改到 GitHub2.5 创建 Pull Request 3. 优化你的 PR3.1 保持提交清晰…

Unity构建详解(10)——Unity构建流程

【前言】 我们知道从源代码到可执行文件有四个步骤&#xff1a;预编译、编译、汇编、链接 预编译&#xff1a;处理源代码文件中的以“#”开始的各种预编译指令编译&#xff1a;通过语法语义分析等将源代码文件转为中间语言文件并进行优化&#xff0c;再生成汇编代码文件汇编&…

【服务器部署篇】Linux下快速安装Jenkins

作者介绍&#xff1a;本人笔名姑苏老陈&#xff0c;从事JAVA开发工作十多年了&#xff0c;带过刚毕业的实习生&#xff0c;也带过技术团队。最近有个朋友的表弟&#xff0c;马上要大学毕业了&#xff0c;想从事JAVA开发工作&#xff0c;但不知道从何处入手。于是&#xff0c;产…