关于算法中的数学知识

关于算法中的数学知识这篇博客介绍了编程中的一些基本数学概念和算法实现 包括最小公倍数 闰年判断 最大公约数 斐波那契数列 素数检测以及回文数检查

最小公倍数:两个或多个整数公有的倍数叫做它们的公倍数,其中除0以外最小的一个公倍数就叫做这几个整数的最小公倍数。

用两个数的乘积除以最大公约数即可:

a*b/gcd(a,b) 

闰年:能被400整除或能被4整除,并且不能被100整除

编程表达:if((year%400==0)||(year%4==0)&&(year%100!=0))

最大公约数:最大公因数,也称最大最大公约数,指两个或多个整数共有中最大的一个。

编程表达:辗转相除法

int measure(int x, int y) { int z = y; while(x%y!=0) { z = x%y; x = y; y = z; } return z; } 

博客上的简便法:

int gcd(int a,int b){ return b==0?a:gcd(b,a%b); } 

斐波那契数列:1,1,2,3,5,8,13…这样一个数列就是斐波那契数列

观察数列可得,除了第一项和第二项,所有的数列的值都是前一项和前一项的前一项的加和,转换成函数也就是f(n) = f(n-1) + f(n-2)

编程表达:顺序求法 O(n)

int f2(int n) { if(n < 1) { return 0; }else if(n == 1 || n == 2) { return 1; } int res = 1; int pre = 1; int temp = 0; for(int i = 3; i <=n; i++) { temp = res; res = pre + res; pre = temp; } return res; } 

素数:素数是指在大于1的自然数中,除了1和它本身以外,不能被其他自然数整除的数.

编程表达:①直接法

int isprime(int n){ if (n <= 3) { return n > 1;//2,3会返回1,0,1会返回0 } for(int i = 2; i < n; i++){ if (n % i == 0) { return 0; } } return 1; } 有可能会超时 

②sqrt法

int IsPrime(int number ) { int i,k=0; if(number==1) return 0; else { for(i=2;i<=sqrt(number);i++) { if(number%i==0) { k=1; return 0; break; } } if(k==0) return 1; } } 因break的存在效率较高 

真因数:是指一个自然数除自身以外的因数

例:6的因数有1、2、3、6,真因数则是1、2、3。

编程表达:真因数较为简单看看即可

int SumProperFactor(int x) { if(x>0){ int sum=0; for(int i=1;i<x;i++) { if(x%i==0) { sum+=i; } } return sum; } else return 0; } 

回文数

bool huiwen(int s[]) { for (int i = 0; i < 4; i++) { if (s[i] != s[7 - i]) return false; } return true; } include<stdio.h> int main() { int a,sum=0,m,x,y;//定义变量 scanf("%d%d",&x,&y);//输入要找对称日的区间 for(m=x;m<=y;m++) { a=m; while(a!=0) { sum=sum*10+a%10;//利用循环算出此数的倒序数 a/=10; } if(sum==m)//若倒序数等于正序数 { printf("%d ",m);//输出这个数 } sum=0; } printf("\n");//全部数找完后结束 return 0; } 
今天的文章 关于算法中的数学知识分享到此就结束了,感谢您的阅读。
编程小号
上一篇 2024-12-31 07:17
下一篇 2024-12-31 07:11

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/97982.html