基础算法
张小白不白
博采众长,厚积薄发
展开
-
辗转相除求解方程的整数解
题目已知a,b是整数,求ax + by=1的一组整数解。分析思考过程如下:先考虑一种最简单的情况,假设b为0,则a = 1,x = 1,y可以取任意值。如果系数a和b的最大公约数大于1,那么这个方程一定没有整数解。联想到辗转相除法求a,b两个数的最大公约数时,如果最大公约数为1,则无论a,b的初始值为多少当迭代到最后一轮的时候都有a = 1,b = 0,恰好与这个方程最简单的情况相同...原创 2019-07-30 17:20:06 · 1795 阅读 · 0 评论 -
大数相乘(阶乘)
题目n! 的意思是 n × (n − 1) × … × 3 × 2 × 1例如,10! = 10 × 9 × … × 3 × 2 × 1 = 3628800,所以10!的各位数字和是 3 + 6 + 2 + 8 + 8 + 0 + 0 = 27。求出100!的各位数字和。分析思路较大数字的阶乘结果需要开辟数组才能保存得下每一步都是当前数字和上一步的结果的每一位相乘,然后进位代码展...原创 2019-08-17 16:12:15 · 404 阅读 · 0 评论 -
位数不同的大数相加
分析思路当大数的位数不同时,相加时要注意位数的对齐代码如下关键逻辑见注释#include<stdio.h>#include<string.h>char num[55];int ans[55] = {0};int main() { for (int i = 0; i < 100; ++i) { scanf("%s", nu...原创 2019-08-17 15:56:30 · 251 阅读 · 0 评论 -
c语言实现大数加法(第一个有1000位数的斐波那契数的项数)
题目斐波那契数列是按如下递归关系定义的数列:F1 = 1 F2 = 1Fn = Fn−1 + Fn−2因此斐波那契数列的前12项分别是:F1 = 1F2 = 1F3 = 2F4 = 3F5 = 5F6 = 8F7 = 13F8 = 21F9 = 34F10 = 55F11 = 89F12 = 144第一个有三位数字的项是第12项F12。在斐波那契数列中,第一个有...原创 2019-08-17 15:22:38 · 1676 阅读 · 0 评论 -
求整数的位数公式
题目圆周素数197被称为圆周素数,因为将它逐位旋转所得到的数:197/971和719都是素数。小于100的圆周素数有十三个:2、3、5、7、11、13、17、31、37、71、73、79和97。小于一百万的圆周素数有多少个?思路分析逐位翻转需要直到整数的位数整数为公式为 y=log10x+1 y = log_{10}^x + 1 y=log10x+1代码如下#include...原创 2019-08-17 14:30:48 · 2248 阅读 · 0 评论 -
求整数的素因子的个数
思路分析在前面的文章中分析了求整数的约数个数,方法是利用了约数定理,在线性筛筛选素数的过程中对约数个数的数组进行标记。同样的方法,可以求整数的素因子,并且更加简单。代码如下代码分析见注释#include<iostream>using namespace std;#define max_n 1000000int prime[max_n + 5] = {0};int...原创 2019-08-17 12:05:22 · 1743 阅读 · 0 评论 -
求整数所有约数的和
思路分析在上一篇求整数的约数个数.的文章中,我们开一个存放整数约数个数的数组,利用线性筛的筛选素数的过程,对任意整数约数个数进行标记。同样的思路, 我们这里可以开一个存放整数约数和的数组, 利用线性筛筛选素数过程,对任意整数约数的和进行标记,代码如下#include<iostream>#include<cmath>using namespace std;#...原创 2019-08-17 10:47:49 · 2155 阅读 · 0 评论 -
求整数的约数个数
题目三角形数数列是通过逐个加上自然数来生成的。例如,第7个三角形数是 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28。三角形数数列的前十项分别是:1, 3, 6, 10, 15, 21, 28, 36, 45, 55, …让我们列举出前七个三角形数的所有约数:1: 13: 1,36: 1,2,3,610: 1,2,5,1015: 1,3,5,1521: 1,3,7,...原创 2019-08-17 01:37:15 · 1458 阅读 · 0 评论 -
普通筛和线性筛求某一范围内的质数
普通筛和线性筛求某一范围内的质数普通筛分析思路凡是可以通过除了1和他本身以外两个整数相乘得到的数必定不是质数。很常规的思考方式是用两层循环,外层从2开始直到最大边界,内层从2开始直它与外层的乘积到最大边界定义一个不小于最大边界的数组,并初始化所有元素为零,用数组的索引值作为范围内的整数。如果整数为合数,则把对应索引的数组值赋值为1代码如下#include<stdio.h&g...原创 2019-08-07 00:50:13 · 245 阅读 · 0 评论 -
如何在c/c++中使用π值
使用三角函数余弦函数cos(π)等于-1c/c++中math库里提供的反余弦函数acos(-1)就是π的近似值代码如下#include<iostream>#include<cstdio>#include<cmath>using namespace std;int main() { printf("%.15lf\n", acos(-1...原创 2019-08-02 10:02:43 · 9180 阅读 · 1 评论 -
记忆化搜索算法的一个简单应用
题目The following iterative sequence is defined for the set of positive integers:n → n/2 (n is even)n → 3n + 1 (n is odd)Using the rule above and starting with 13, we generate the following sequence...原创 2019-08-08 10:25:01 · 277 阅读 · 0 评论 -
求整数的最大质因子(欧拉第三题)
题目The prime factors of 13195 are 5, 7, 13 and 29.What is the largest prime factor of the number 600851475143 ?分析判断一个整数n是不是质数的循环过程,只需要判断n能否被n的平方根以内的整数整除 即可任意一个合数,都可以拆分成唯一的一组质数相乘的表示形式求整数的最大质因子,只需...原创 2019-08-01 17:06:50 · 1918 阅读 · 0 评论 -
大数减法
分析思路大数减法的基本思想和大数加法一样,都是存储成数组的形式,按位进行计算大数减法的特殊性在于不够减时候的借位代码实现关键逻辑见注释#include<iostream>#include<cstring>using namespace std;//用字符串比较方式判断两个数的大小bool stringcmp(char *p1, char *p2) {...原创 2019-08-18 12:34:57 · 953 阅读 · 0 评论