用含2的n次幂的多项式来表示一个数(Cpp实现)

本文探讨如何用2的幂表示正整数,通过将十进制数转换为二进制来解决该问题。通过不断除以2的幂,找到对应的指数并累加,实现了一个C++代码示例,包括迭代和递归两种方法。
摘要由CSDN通过智能技术生成

用2的幂来表示一个正整数

简单思考一下,所有的奇数和偶数构成了自然数,对于奇数我们可以用2n + 1表示,而偶数我们可以用2n表示。所以我们可以简单的认为任何一个正整数都可以用2的n次幂来表示。事实上我们可以进一步看这个问题:如何把一个十进制数转化为二进制数。一般的方法是把一个十进制数不断除以2,直到商为零,依次写下余数。所以开始的问题也就解决了。下面我们用代码来实现一下这个伟大的过程。

这里我们找一个十分巨大的范围也就是幂小于200的情况。然后不断除以2的i次幂,直到我们发现余数不为零,然后第i- 1次幂为一个2的幂项,直到最后。整个来说就是一个不断除以2的过程。

void findSerise(long int number)
{
   
	int i = 0; 
	while (i 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用矩阵实现多项式曲线拟合的 C++ 代码示例: ```cpp #include <iostream> #include <vector> #include <Eigen/Dense> using namespace Eigen; // 多项式曲线拟合函 VectorXd polynomialCurveFit(const MatrixXd& X, const VectorXd& y, int degree) { // 构建矩阵 A 和向量 b int n = X.rows(); MatrixXd A(n, degree + 1); VectorXd b = y; for (int i = 0; i < n; i++) { for (int j = 0; j <= degree; j++) { A(i, j) = std::pow(X(i), j); } } // 使用最小二乘法求解多项式 VectorXd coeffs = A.colPivHouseholderQr().solve(b); return coeffs; } int main() { // 样本据集 std::vector<double> x_data = {1.0, 2.0, 3.0, 4.0, 5.0}; std::vector<double> y_data = {1.2, 1.9, 3.2, 3.8, 5.1}; int n = x_data.size(); // 样本量 // 将样本据转换为矩阵形式 MatrixXd X(n, 1); VectorXd y(n); for (int i = 0; i < n; i++) { X(i) = x_data[i]; y(i) = y_data[i]; } // 设置多项式的阶 int degree = 2; // 多项式曲线拟合 VectorXd coeffs = polynomialCurveFit(X, y, degree); // 输出拟合的多项式 std::cout << "拟合的多项式为:\n" << coeffs << std::endl; return 0; } ``` 这个示例代码使用了 Eigen 库来进行矩阵运算和最小二乘法求解。在 `polynomialCurveFit` 函中,构建了一个矩阵 A 和向量 b,其中 A 的每一行表示样本据的 x 值的不同幂次项,b 则直接使用样本据的 y 值。然后使用 `colPivHouseholderQr().solve(b)` 方法使用最小二乘法求解多项式的系。 在 `main` 函中,给定了一个样本据集,将其转换为矩阵形式,并设置了多项式的阶为 2。然后调用 `polynomialCurveFit` 函进行多项式曲线拟合,并输出拟合的多项式。 请注意,运行此示例代码之前,需要先安装并配置好 Eigen 库。你可以从官方网站(https://eigen.tuxfamily.org/)下载并安装 Eigen 库。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值