常用算法模板库(C++)
C语言常用算法
C语言常用算法1.整型数据的相关操作运算:十进制位的拆分、合并、左移、右移、位删除、位的累加、连乘等运算;进制数的编程转换、整型数与数字串的相互转换;整型数据的奇偶判断;整型数据间的公约数、公倍数计算,算术、关系、逻辑等运算;●题目:输入两个正整数m和n,求其最大公约数和最小公倍数。
●题目:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。
例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。
●题目:将一个正整数分解质因数。
例如:输入90,打印出90=2*3*3*5。
●题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
●题目:一个5位数,判断它是不是回文数。
即12321是回文数,个位与万位相同,十位与千位相同。
●题目:求0—7所能组成的奇数个数。
●题目:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换●题目:八进制转换为十进制程序源代码:main(){char *p,s[6];int n;p=s;gets(p);n=0;while(*(p)!='\0'){n=n*8+*p-'0';p++;}printf("%d",n);}2.素数问题和因子问题:●题目:判断101-200之间有多少个素数,并输出所有素数。
●题目:一个数如果恰好等于它的因子之和,这个数就称为“完数”。
例如6=1+2+3.编程找出1000以内的所有完数。
3.实数的四舍五入4.逻辑运算及扩展问题:●编写函数,求出1到m(含m)之内能被7或11整除的所有整数并放在数组a中5.递推的概念、累加以及函数pow的使用。
●例:S=1+x+x2/2!+x3/3!+…+xn/n!,阶乘和xn ,可由递推求得,库函数pow(x,i)可来计算xn值●题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
C常用经典算法及其实现
C常⽤经典算法及其实现常⽤算法经典代码(C++版)⼀、快速排序void qsort(int x,int y) //待排序的数据存放在a[1]..a[n]数组中{int h=x,r=y;int m=a[(x+y)>>1]; //取中间的那个位置的值while(h{while (a[h]m) r--; //⽐中间那个位置的值⼤,循环直到找⼀个⽐中间那个值⼩的if(h<=r) {int temp=a[h];//如果此时h<=r,交换a[h]和a[r]a[h]=a[r];a[r]=temp;h++;r--; //这两句必不可少哦}}if(r>x) qsort(x,r);//注意此处,尾指针跑到前半部分了if(h}调⽤:qsort(1,n)即可实现数组a中元素有序。
适⽤于n⽐较⼤的排序⼆、冒泡排序void paopao(void) //待排序的数据存放在a[1]..a[n]数组中{for(int i=1;ifor(int j=1;j<=n-i;j++) //相邻的两两⽐较if(a[j]}或者void paopao(void) //待排序的数据存放在a[1]..a[n]数组中{for(int i=1;ifor(int j=n-i;j>=1;j--) //相邻的两两⽐较if(a[j]}调⽤:paopao(),适⽤于n⽐较⼩的排序三、桶排序void bucketsort(void)//a的取值范围已知。
如a<=cmax。
{memset(tong,0,sizeof(tong));//桶初始化for(int i=1;i<=n;i++)//读⼊n个数{int acin>>a;tong[a]++;}//相应的桶号计数器加1for(int i=1;i<=cmax;i++){if(tong[i]>0) //当桶中装的树⼤于0,说明i出现过tong[i]次,否则没出现过iwhile (tong[i]!=0){tong[i]--;cout<}}桶排序适⽤于那些待排序的关键字的值在已知范围的排序。
常用Hash算法(C语言的简单实现)
常⽤Hash算法(C语⾔的简单实现)如下所⽰:#include "GeneralHashFunctions.h"unsigned int RSHash(char* str, unsigned int len){unsigned int b = 378551;unsigned int a = 63689;unsigned int hash = 0;unsigned int i = 0;for(i = 0; i < len; str++, i++){hash = hash * a + (*str);a = a * b;}return hash;}/* End Of RS Hash Function */unsigned int JSHash(char* str, unsigned int len){unsigned int hash = 1315423911;unsigned int i = 0;for(i = 0; i < len; str++, i++){hash ^= ((hash << 5) + (*str) + (hash >> 2));}return hash;}/* End Of JS Hash Function */unsigned int PJWHash(char* str, unsigned int len){const unsigned int BitsInUnsignedInt = (unsigned int)(sizeof(unsigned int) * 8);const unsigned int ThreeQuarters = (unsigned int)((BitsInUnsignedInt * 3) / 4);const unsigned int OneEighth = (unsigned int)(BitsInUnsignedInt / 8);const unsigned int HighBits = (unsigned int)(0xFFFFFFFF) << (BitsInUnsignedInt - OneEighth);unsigned int hash = 0;unsigned int test = 0;unsigned int i = 0;for(i = 0; i < len; str++, i++){hash = (hash << OneEighth) + (*str);if((test = hash & HighBits) != 0){hash = (( hash ^ (test >> ThreeQuarters)) & (~HighBits));}}return hash;}/* End Of P. J. Weinberger Hash Function */unsigned int ELFHash(char* str, unsigned int len){unsigned int hash = 0;unsigned int x = 0;unsigned int i = 0;for(i = 0; i < len; str++, i++){hash = (hash << 4) + (*str);if((x = hash & 0xF0000000L) != 0){hash ^= (x >> 24);}hash &= ~x;}return hash;}/* End Of ELF Hash Function */unsigned int BKDRHash(char* str, unsigned int len){unsigned int seed = 131; /* 31 131 1313 13131 131313 etc.. */ unsigned int hash = 0;unsigned int i = 0;for(i = 0; i < len; str++, i++){hash = (hash * seed) + (*str);}return hash;}/* End Of BKDR Hash Function */unsigned int SDBMHash(char* str, unsigned int len){unsigned int hash = 0;unsigned int i = 0;for(i = 0; i < len; str++, i++){hash = (*str) + (hash << 6) + (hash << 16) - hash;}return hash;}/* End Of SDBM Hash Function */unsigned int DJBHash(char* str, unsigned int len){unsigned int hash = 5381;unsigned int i = 0;for(i = 0; i < len; str++, i++){hash = ((hash << 5) + hash) + (*str);}return hash;}/* End Of DJB Hash Function */unsigned int DEKHash(char* str, unsigned int len){unsigned int hash = len;unsigned int i = 0;for(i = 0; i < len; str++, i++){hash = ((hash << 5) ^ (hash >> 27)) ^ (*str);}return hash;}/* End Of DEK Hash Function */unsigned int BPHash(char* str, unsigned int len){unsigned int hash = 0;unsigned int i = 0;for(i = 0; i < len; str++, i++){hash = hash << 7 ^ (*str);}return hash;}/* End Of BP Hash Function */unsigned int FNVHash(char* str, unsigned int len){const unsigned int fnv_prime = 0x811C9DC5;unsigned int hash = 0;unsigned int i = 0;for(i = 0; i < len; str++, i++){hash *= fnv_prime;hash ^= (*str);}return hash;}/* End Of FNV Hash Function */unsigned int APHash(char* str, unsigned int len){unsigned int hash = 0xAAAAAAAA;unsigned int i = 0;for(i = 0; i < len; str++, i++){hash ^= ((i & 1) == 0) ? ( (hash << 7) ^ (*str) * (hash >> 3)) :(~((hash << 11) + ((*str) ^ (hash >> 5))));}return hash;}/* End Of AP Hash Function */以上就是⼩编为⼤家带来的常⽤Hash算法(C语⾔的简单实现)的全部内容了,希望对⼤家有所帮助,多多⽀持~。
单片机常用的14个C语言算法,看过的都成了大神!
单片机常用的14个C语言算法,看过的都成了大神!算法(Algorithm):计算机解题的基本思想方法和步骤。
算法的描述:是对要解决一个问题或要完成一项任务所采取的方法和步骤的描述,包括需要什么数据(输入什么数据、输出什么结果)、采用什么结构、使用什么语句以及如何安排这些语句等。
通常使用自然语言、结构化流程图、伪代码等来描述算法。
一、计数、求和、求阶乘等简单算法此类问题都要使用循环,要注意根据问题确定循环变量的初值、终值或结束条件,更要注意用来表示计数、和、阶乘的变量的初值。
例:用随机函数产生100个[0,99]范围内的随机整数,统计个位上的数字分别为1,2,3,4,5,6,7,8,9,0的数的个数并打印出来。
本题使用数组来处理,用数组a[100]存放产生的确100个随机整数,数组x[10]来存放个位上的数字分别为1,2,3,4,5,6,7,8,9,0的数的个数。
即个位是1的个数存放在x[1]中,个位是2的个数存放在x[2]中,……个位是0的个数存放在x[10]。
void main(){int a[101],x[11],i,p;for(i=0;in; (2) m除以n得余数r; (3) 若r=0,则n为求得的最大公约数,算法结束;否则执行(4); (4) m←n,n←r,再重复执行(2)。
例如: 求m="14" ,n=6 的最大公约数. m n r 14 6 2 6 2 0 void main() { int nm,r,n,m,t; printf("please input two numbers:\n"); scanf("%d,%d", nm=n*m; if (m{ t="n"; n="m"; m="t"; } r=m%n; while (r!=0) { m="n"; n="r"; r="m"%n; } printf("最大公约数:%d\n",n); printf("最小公倍数:%d\n",nm/n); } 三、判断素数只能被1或本身整除的数称为素数基本思想:把m作为被除数,将2—INT()作为除数,如果都除不尽,m就是素数,否则就不是。
数据结构 耿国华 西北大学 2-9算法实现模板
模板二:多文件结构模板 大型程序一般都采用多文件结构,以下是多文件结构的顺序表合并的例子。 模板的基本结构如下:
⑴ 包含必要的标准头文件,如标准的输入输出头文件 "stdio.h";同时给出必要 的符号常量宏定义; ⑵ 将某一数据结构所对应的类型定义存放在一个头文件当中,将某一数据结 构所对应的基本操作算法存放在一个分类的.c 文件当中.如:可以将单链表的有 关类型定义存放在 seqlist.h 中,将单链表的基本操作算法存放在 seqlist.c 中,之后 通过文件包含#include "seqlist.h" 和#include "seqlist.c",以实现对有关数据类型的 引用及有关操作函数的调用; ⑶ 编写基于某种数据结构的具体问题的算法; ⑷ 编写主函数,其中进行合理的函数调用,形成一个可执行程序。
int k; if((i<1) || (i>L->last+2)) /*首先判断插入位置是否合法*/ {
printf("插入位置 i 值不合法"); return(ERROR); } if(L->last>= MAXSIZE-1) { printf("表已满无法插入"); return(ERROR); } for(k=L->last;k>=i-1;k--) /*为插入元素而移动位置*/ L->elem[k+1]=L->elem[k]; L->elem[i-1]=e; /*在 C 语言数组中,第 i 个元素的下标为 i-1*/ L->last++; return(OK); }
while(i<=LA->last) /*当表 LA 有剩余元素时,则将表 LA 余下的元素赋给
C语言常用算法程序汇总
C程序设计的常用算法算法(Algorithm):计算机解题的基本思想方法和步骤。
算法的描述:是对要解决一个问题或要完成一项任务所采取的方法和步骤的描述,包括需要什么数据(输入什么数据、输出什么结果)、采用什么结构、使用什么语句以及如何安排这些语句等。
通常使用自然语言、结构化流程图、伪代码等来描述算法。
一、简单数值类算法此类问题都要使用循环,要注意根据问题确定循环变量的初值、终值或结束条件,更要注意用来表示计数、和、阶乘的变量的初值。
1、求阶乘:n!=1*2*384…..*n; n!= n*(n-1)!=下列程序用于求n的阶乘.在累乘之前,一定要将用于存放乘积的变量的值初始化为1.long func(int n){int i;long t=1;for(i=2;i<=n;i++)t*=i;return t;}printf("\n");}main(){ int n;scanf("%d", &n);printf("n!=%ld\n", fac(n));}2、整数拆分问题:把一个整数各个位上的数字存到数组中#define N 4 /* N代表整数位数*/viod split(int n, int a[ ])/* 1478: a[ 3]=8, a[2 ]=7, a[1 ]=4…*/{int i;for(i=N-1;i!=0; i--){ a[i]=n%10;n=n/10;}}main(){int i,m=1478,b[N-1];split(m, b);for(i=0;i<4; i++)printf(“%5d”, b[i]);}3、求整数的因子之和12=1*2*3*4long factor(int n){int i;long sum=0;for(i=1;i<=n;i++)if(n%i= =0)sum+=i;return sum;}注意:因子包括1和自身。
初中常见数学计算方法【范本模板】
1、C列分数化小数的记法:分子乘5,小数点向左移动两位。
2、D、E两列分数化小数的记法:分子乘4,小数点向左移动两位常见分数、小数互化表常见的分数、小数及百分数的互化错位相加/减A×9型速算技巧:A×9= A×10—A;例:743×9=743×10—743=7430—743=6687A×9.9型速算技巧:A×9.9= A×10+A÷10;例:743×9。
9=743×10-743÷10=7430-74。
3=7355。
7A×11型速算技巧:A×11= A×10+A;例:743×11=743×10+743=7430+743=8173A×101型速算技巧:A×101= A×100+A;例:743×101=743×100+743=75043乘/除以5、25、125的速算技巧:A×5型速算技巧:A×5=10A÷2;例:8739。
45×5=8739.45×10÷2=87394.5÷2=43697.25A÷5型速算技巧:A÷5=0.1A×2;例:36.843÷5=36。
843×0。
1×2=3。
6843×2=7。
3686A×25型速算技巧:A×25=100A÷4;例:7234×25=7234×100÷4=723400÷4=180850A÷25型速算技巧:A÷25=0.01A×4;例:3714÷25=3714×0。
01×4=37.14×4=148.56A×125型速算技巧:A×5=1000A÷8;例:8736×125=8736×1000÷8=8736000÷8=1092000A÷125型速算技巧:A÷1255=0。
CRC检验的所有常用算法(C代码)
CRC检验的所有常⽤算法(C代码)本⽂的代码从以下⽹址修改⽽来:《CRC16常见⼏个标准的算法及C语⾔实现》代码在VS2008上验证过。
⼀共有6个⽂件。
crc_common.h/****************************Info*********************************************** Name: InvertUint8* Note: 把字节颠倒过来,如0x12变成0x480x12: 0001 00100x48: 0100 1000*****************************************************************************/void InvertUint8(unsigned char *dBuf,unsigned char *srcBuf);void InvertUint16(unsigned short *dBuf,unsigned short *srcBuf);void InvertUint32(unsigned int *dBuf,unsigned int *srcBuf);crc_common.cpp// 参考⾃; https:///leumber/article/details/54311811?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522160274684119724813264633%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%2 /****************************Info*********************************************** Name: InvertUint8* Note: 把字节颠倒过来,如0x12变成0x480x12: 0001 00100x48: 0100 1000*****************************************************************************/void InvertUint8(unsigned char *dBuf,unsigned char *srcBuf){int i;unsigned char tmp[4]={0};for(i=0;i< 8;i++){if(srcBuf[0]& (1 << i))tmp[0]|=1<<(7-i);}dBuf[0] = tmp[0];}void InvertUint16(unsigned short *dBuf,unsigned short *srcBuf){int i;unsigned short tmp[4]={0};for(i=0;i< 16;i++){if(srcBuf[0]& (1 << i))tmp[0]|=1<<(15 - i);}dBuf[0] = tmp[0];}void InvertUint32(unsigned int *dBuf,unsigned int *srcBuf){int i;unsigned int tmp[4]={0};for(i=0;i< 32;i++){if(srcBuf[0]& (1 << i))tmp[0]|=1<<(31 - i);}dBuf[0] = tmp[0];}crc_16.h/****************************Info*********************************************** Name: CRC-16/CCITT x16+x12+x5+1* Width: 16* Poly: 0x1021* Init: 0x0000* Refin: True* Refout: True* Xorout: 0x0000* Alias: CRC-CCITT,CRC-16/CCITT-TRUE,CRC-16/KERMIT*****************************************************************************/unsigned short CRC16_CCITT(unsigned char *data, unsigned int datalen);/****************************Info*********************************************** Name: CRC-16/CCITT-FALSE x16+x12+x5+1* Width: 16* Poly: 0x1021* Init: 0xFFFF* Refin: False* Refout: False* Xorout: 0x0000* Note:*****************************************************************************/unsigned short CRC16_CCITT_FALSE(unsigned char *data, unsigned int datalen);/****************************Info*********************************************** Name: CRC-16/XMODEM x16+x12+x5+1* Width: 16* Poly: 0x1021* Init: 0x0000* Refin: False* Refout: False* Xorout: 0x0000*****************************************************************************/ unsigned short CRC16_XMODEM(unsigned char *data, unsigned int datalen); /****************************Info*********************************************** Name: CRC-16/X25 x16+x12+x5+1* Width: 16* Poly: 0x1021* Init: 0xFFFF* Refin: True* Refout: True* Xorout: 0XFFFF* Note:*****************************************************************************/ unsigned short CRC16_X25(unsigned char *data, unsigned int datalen);/****************************Info*********************************************** Name: CRC-16/MODBUS x16+x15+x2+1* Width: 16* Poly: 0x8005* Init: 0xFFFF* Refin: True* Refout: True* Xorout: 0x0000* Note:*****************************************************************************/ unsigned short CRC16_MODBUS(unsigned char *data, unsigned int datalen); /****************************Info*********************************************** Name: CRC-16/IBM x16+x15+x2+1* Width: 16* Poly: 0x8005* Init: 0x0000* Refin: True* Refout: True* Xorout: 0x0000* Alias: CRC-16,CRC-16/ARC,CRC-16/LHA*****************************************************************************/ unsigned short CRC16_IBM(unsigned char *data, unsigned int datalen);/****************************Info*********************************************** Name: CRC-16/MAXIM x16+x15+x2+1* Width: 16* Poly: 0x8005* Init: 0x0000* Refin: True* Refout: True* Xorout: 0xFFFF* Note:*****************************************************************************/ unsigned short CRC16_MAXIM(unsigned char *data, unsigned int datalen);/****************************Info*********************************************** Name: CRC-16/USB x16+x15+x2+1* Width: 16* Poly: 0x8005* Init: 0xFFFF* Refin: True* Refout: True* Xorout: 0xFFFF* Note:*****************************************************************************/ unsigned short CRC16_USB(unsigned char *data, unsigned int datalen);/****************************Info*********************************************** Name: CRC-16/DNP x16+x13+x12+x11+x10+x8+x6+x5+x2+1* Width: 16* Poly: 0x3D65* Init: 0x0000* Refin: True* Refout: True* Xorout: 0xFFFF* Use: M-Bus,ect.*****************************************************************************/ unsigned short CRC16_DNP(unsigned char *data, unsigned int datalen);crc_16.cpp#include <stdio.h>#include "crc_common.h"/****************************Info*********************************************** Name: CRC-16/CCITT x16+x12+x5+1* Width: 16* Poly: 0x1021* Init: 0x0000* Refin: True* Refout: True* Xorout: 0x0000* Alias: CRC-CCITT,CRC-16/CCITT-TRUE,CRC-16/KERMIT*****************************************************************************/#if 0unsigned short CRC16_CCITT(unsigned char *data, unsigned int datalen){unsigned short wCRCin = 0x0000;unsigned short wCPoly = 0x1021;unsigned char wChar = 0;while (datalen--){wChar = *(data++);InvertUint8(&wChar,&wChar);wCRCin ^= (wChar << 8);for(int i = 0;i < 8;i++){if(wCRCin & 0x8000)wCRCin = (wCRCin << 1) ^ wCPoly;elsewCRCin = wCRCin << 1;}}InvertUint16(&wCRCin,&wCRCin);return (wCRCin);}#else//这⾥为了效率,我们不需要将所有Refin和refout为true的输⼊输出数据移位转换//只需要将poly⼆项式转换后,运算时将左移变为右移unsigned short CRC16_CCITT(unsigned char *data, unsigned int datalen){unsigned short wCRCin = 0x0000;unsigned char wChar = 0;InvertUint16(&wCPoly,&wCPoly);while (datalen--){wCRCin ^= *(data++);for(int i = 0;i < 8;i++){if(wCRCin & 0x01)wCRCin = (wCRCin >> 1) ^ wCPoly;elsewCRCin = wCRCin >> 1;}}return (wCRCin);}#endif/****************************Info*********************************************** Name: CRC-16/CCITT-FALSE x16+x12+x5+1* Width: 16* Poly: 0x1021* Init: 0xFFFF* Refin: False* Refout: False* Xorout: 0x0000* Note:*****************************************************************************/unsigned short CRC16_CCITT_FALSE(unsigned char *data, unsigned int datalen) {unsigned short wCRCin = 0xFFFF;unsigned short wCPoly = 0x1021;while (datalen--){wCRCin ^= *(data++) << 8;for(int i = 0;i < 8;i++){if(wCRCin & 0x8000)wCRCin = (wCRCin << 1) ^ wCPoly;elsewCRCin = wCRCin << 1;}}return (wCRCin);}/****************************Info*********************************************** Name: CRC-16/XMODEM x16+x12+x5+1* Width: 16* Poly: 0x1021* Init: 0x0000* Refin: False* Refout: False* Xorout: 0x0000* Alias: CRC-16/ZMODEM,CRC-16/ACORN*****************************************************************************/unsigned short CRC16_XMODEM(unsigned char *data, unsigned int datalen){unsigned short wCRCin = 0x0000;unsigned short wCPoly = 0x1021;while (datalen--){wCRCin ^= (*(data++) << 8);for(int i = 0;i < 8;i++){if(wCRCin & 0x8000)wCRCin = (wCRCin << 1) ^ wCPoly;elsewCRCin = wCRCin << 1;}}return (wCRCin);}/****************************Info*********************************************** Name: CRC-16/X25 x16+x12+x5+1* Width: 16* Poly: 0x1021* Init: 0xFFFF* Refin: True* Refout: True* Xorout: 0XFFFF* Note:*****************************************************************************/#if 0unsigned short CRC16_X25(unsigned char *data, unsigned int datalen){unsigned short wCRCin = 0xFFFF;unsigned short wCPoly = 0x1021;unsigned char wChar = 0;while (datalen--){wChar = *(data++);InvertUint8(&wChar,&wChar);wCRCin ^= (wChar << 8);for(int i = 0;i < 8;i++){if(wCRCin & 0x8000)wCRCin = (wCRCin << 1) ^ wCPoly;elsewCRCin = wCRCin << 1;}}InvertUint16(&wCRCin,&wCRCin);return (wCRCin^0xFFFF);}#elseunsigned short CRC16_X25(unsigned char *data, unsigned int datalen){unsigned short wCRCin = 0xFFFF;unsigned short wCPoly = 0x1021;InvertUint16(&wCPoly,&wCPoly);while (datalen--){wCRCin ^= *(data++);for(int i = 0;i < 8;i++){if(wCRCin & 0x01)wCRCin = (wCRCin >> 1) ^ wCPoly;elsewCRCin = wCRCin >> 1;}return (wCRCin^0xFFFF);}#endif/****************************Info*********************************************** Name: CRC-16/MODBUS x16+x15+x2+1* Width: 16* Poly: 0x8005* Init: 0xFFFF* Refin: True* Refout: True* Xorout: 0x0000* Note:*****************************************************************************/#if 0unsigned short CRC16_MODBUS(unsigned char *data, unsigned int datalen) {unsigned short wCRCin = 0xFFFF;unsigned short wCPoly = 0x8005;unsigned char wChar = 0;while (datalen--){wChar = *(data++);InvertUint8(&wChar,&wChar);wCRCin ^= (wChar << 8);for(int i = 0;i < 8;i++){if(wCRCin & 0x8000)wCRCin = (wCRCin << 1) ^ wCPoly;elsewCRCin = wCRCin << 1;}}InvertUint16(&wCRCin,&wCRCin);return (wCRCin);}#elseunsigned short CRC16_MODBUS(unsigned char *data, unsigned int datalen) {unsigned short wCRCin = 0xFFFF;unsigned short wCPoly = 0x8005;InvertUint16(&wCPoly,&wCPoly);while (datalen--){wCRCin ^= *(data++);for(int i = 0;i < 8;i++){if(wCRCin & 0x01)wCRCin = (wCRCin >> 1) ^ wCPoly;elsewCRCin = wCRCin >> 1;}}return (wCRCin);}#endif/****************************Info*********************************************** Name: CRC-16/IBM x16+x15+x2+1* Width: 16* Poly: 0x8005* Init: 0x0000* Refin: True* Refout: True* Xorout: 0x0000* Alias: CRC-16,CRC-16/ARC,CRC-16/LHA*****************************************************************************/#if 0unsigned short CRC16_IBM(unsigned char *data, unsigned int datalen){unsigned short wCRCin = 0x0000;unsigned short wCPoly = 0x8005;unsigned char wChar = 0;while (datalen--){wChar = *(data++);InvertUint8(&wChar,&wChar);wCRCin ^= (wChar << 8);for(int i = 0;i < 8;i++){if(wCRCin & 0x8000)wCRCin = (wCRCin << 1) ^ wCPoly;elsewCRCin = wCRCin << 1;}}InvertUint16(&wCRCin,&wCRCin);return (wCRCin);}#elseunsigned short CRC16_IBM(unsigned char *data, unsigned int datalen){unsigned short wCRCin = 0x0000;unsigned short wCPoly = 0x8005;InvertUint16(&wCPoly,&wCPoly);while (datalen--){wCRCin ^= *(data++);for(int i = 0;i < 8;i++){if(wCRCin & 0x01)wCRCin = (wCRCin >> 1) ^ wCPoly;elsewCRCin = wCRCin >> 1;}}return (wCRCin);}#endif/****************************Info*********************************************** Name: CRC-16/MAXIM x16+x15+x2+1* Width: 16* Poly: 0x8005* Init: 0x0000* Refin: True* Refout: True* Xorout: 0xFFFF* Note:*****************************************************************************/unsigned short CRC16_MAXIM(unsigned char *data, unsigned int datalen) {unsigned short wCRCin = 0x0000;unsigned short wCPoly = 0x8005;unsigned char wChar = 0;while (datalen--){wChar = *(data++);InvertUint8(&wChar,&wChar);wCRCin ^= (wChar << 8);for(int i = 0;i < 8;i++){if(wCRCin & 0x8000)wCRCin = (wCRCin << 1) ^ wCPoly;elsewCRCin = wCRCin << 1;}}InvertUint16(&wCRCin,&wCRCin);return (wCRCin^0xFFFF);}#elseunsigned short CRC16_MAXIM(unsigned char *data, unsigned int datalen) {unsigned short wCRCin = 0x0000;unsigned short wCPoly = 0x8005;InvertUint16(&wCPoly,&wCPoly);while (datalen--){wCRCin ^= *(data++);for(int i = 0;i < 8;i++){if(wCRCin & 0x01)wCRCin = (wCRCin >> 1) ^ wCPoly;elsewCRCin = wCRCin >> 1;}}return (wCRCin^0xFFFF);}#endif/****************************Info*********************************************** Name: CRC-16/USB x16+x15+x2+1* Width: 16* Poly: 0x8005* Init: 0xFFFF* Refin: True* Refout: True* Xorout: 0xFFFF* Note:*****************************************************************************/#if 0unsigned short CRC16_USB(unsigned char *data, unsigned int datalen) {unsigned short wCRCin = 0xFFFF;unsigned short wCPoly = 0x8005;unsigned char wChar = 0;while (datalen--){wChar = *(data++);InvertUint8(&wChar,&wChar);wCRCin ^= (wChar << 8);for(int i = 0;i < 8;i++){if(wCRCin & 0x8000)wCRCin = (wCRCin << 1) ^ wCPoly;elsewCRCin = wCRCin << 1;}}InvertUint16(&wCRCin,&wCRCin);return (wCRCin^0xFFFF);}#elseunsigned short CRC16_USB(unsigned char *data, unsigned int datalen) {unsigned short wCRCin = 0xFFFF;unsigned short wCPoly = 0x8005;InvertUint16(&wCPoly,&wCPoly);while (datalen--){wCRCin ^= *(data++);for(int i = 0;i < 8;i++){if(wCRCin & 0x01)wCRCin = (wCRCin >> 1) ^ wCPoly;elsewCRCin = wCRCin >> 1;}}return (wCRCin^0xFFFF);}#endif/****************************Info*********************************************** Name: CRC-16/DNP x16+x13+x12+x11+x10+x8+x6+x5+x2+1 * Width: 16* Poly: 0x3D65* Init: 0x0000* Refin: True* Refout: True* Xorout: 0xFFFF* Use: M-Bus,ect.*****************************************************************************/#if 0unsigned short CRC16_DNP(unsigned char *data, unsigned int datalen) {unsigned short wCRCin = 0x0000;unsigned short wCPoly = 0x3D65;unsigned char wChar = 0;while (datalen--){wChar = *(data++);InvertUint8(&wChar,&wChar);wCRCin ^= (wChar << 8);for(int i = 0;i < 8;i++){if(wCRCin & 0x8000)elsewCRCin = wCRCin << 1;}}InvertUint16(&wCRCin,&wCRCin);return (wCRCin^0xFFFF) ;}#elseunsigned short CRC16_DNP(unsigned char *data, unsigned int datalen){unsigned short wCRCin = 0x0000;unsigned short wCPoly = 0x3D65;InvertUint16(&wCPoly,&wCPoly);while (datalen--){wCRCin ^= *(data++);for(int i = 0;i < 8;i++){if(wCRCin & 0x01)wCRCin = (wCRCin >> 1) ^ wCPoly;elsewCRCin = (wCRCin >> 1);}}return (wCRCin^0xFFFF);}#endifcrc_32.h/****************************Info*********************************************** Name: CRC-32 x32+x26+x23+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x+1* Width: 32* Poly: 0x4C11DB7* Init: 0xFFFFFFF* Refin: True* Refout: True* Xorout: 0xFFFFFFF* Alias: CRC_32/ADCCP* Use: WinRAR,ect.*****************************************************************************/unsigned int CRC32(unsigned char *data, unsigned int datalen);/****************************Info*********************************************** Name: CRC-32/MPEG-2 x32+x26+x23+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x+1 * Width: 32* Poly: 0x4C11DB7* Init: 0xFFFFFFF* Refin: False* Refout: False* Xorout: 0x0000000* Note:*****************************************************************************/unsigned int CRC32_MPEG(unsigned char *data, unsigned int datalen);crc_32.cpp#include "crc_common.h"/****************************Info*********************************************** Name: CRC-32 x32+x26+x23+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x+1* Width: 32* Poly: 0x4C11DB7* Init: 0xFFFFFFF* Refin: True* Refout: True* Xorout: 0xFFFFFFF* Alias: CRC_32/ADCCP* Use: WinRAR,ect.*****************************************************************************/#if 0unsigned int CRC32(unsigned char *data, unsigned int datalen){unsigned int wCRCin = 0xFFFFFFFF;unsigned int wCPoly = 0x04C11DB7;unsigned int wChar = 0;while (datalen--){wChar = *(data++);InvertUint8((unsigned char *)&wChar,(unsigned char *)&wChar);wCRCin ^= (wChar << 24);for(int i = 0;i < 8;i++){if(wCRCin & 0x80000000)wCRCin = (wCRCin << 1) ^ wCPoly;elsewCRCin = wCRCin << 1;}}InvertUint32(&wCRCin,&wCRCin);return (wCRCin ^ 0xFFFFFFFF) ;}#elseunsigned int CRC32(unsigned char *data, unsigned int datalen){unsigned int wCRCin = 0xFFFFFFFF;unsigned int wCPoly = 0x04C11DB7;InvertUint32(&wCPoly,&wCPoly);while (datalen--){wCRCin ^= *(data++);for(int i = 0;i < 8;i++){if(wCRCin & 0x01)wCRCin = (wCRCin >> 1) ^ wCPoly;elsewCRCin = wCRCin >> 1;}}return (wCRCin ^ 0xFFFFFFFF) ;}#endif/****************************Info*********************************************** Name: CRC-32/MPEG-2 x32+x26+x23+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x+1 * Width: 32* Refin: False* Refout: False* Xorout: 0x0000000* Note:*****************************************************************************/ unsigned int CRC32_MPEG(unsigned char *data, unsigned int datalen) {unsigned int wCRCin = 0xFFFFFFFF;unsigned int wCPoly = 0x04C11DB7;unsigned int wChar = 0;while (datalen--){wChar = *(data++);wCRCin ^= (wChar << 24);for(int i = 0;i < 8;i++){if(wCRCin & 0x80000000)wCRCin = (wCRCin << 1) ^ wCPoly;elsewCRCin = wCRCin << 1;}}return (wCRCin) ;}crc_4_5_6_7_8.h/****************************Info********************************************** * Name: CRC-4/ITU x4+x+1* Width: 4* Poly: 0x03* Init: 0x00* Refin: True* Refout: True* Xorout: 0x00* Note:*****************************************************************************/ unsigned char CRC4_ITU(unsigned char *data, unsigned int datalen); /****************************Info********************************************** * Name: CRC-5/EPC x5+x3+1* Width: 5* Poly: 0x09* Init: 0x09* Refin: False* Refout: False* Xorout: 0x00* Note:*****************************************************************************/ unsigned char CRC5_EPC(unsigned char *data, unsigned int datalen); /****************************Info********************************************** * Name: CRC-5/USB x5+x2+1* Width: 5* Poly: 0x05* Init: 0x1F* Refin: True* Refout: True* Xorout: 0x1F* Note:*****************************************************************************/ unsigned char CRC5_USB(unsigned char *data, unsigned int datalen); /****************************Info********************************************** * Name: CRC-5/ITU x5+x4+x2+1* Width: 5* Poly: 0x15* Init: 0x00* Refin: True* Refout: True* Xorout: 0x00* Note:*****************************************************************************/ unsigned char CRC5_ITU(unsigned char *data, unsigned int datalen); /****************************Info********************************************** * Name: CRC-6/ITU x6+x+1* Width: 6* Poly: 0x03* Init: 0x00* Refin: True* Refout: True* Xorout: 0x00* Note:*****************************************************************************/ unsigned char CRC6_ITU(unsigned char *data, unsigned int datalen); /****************************Info********************************************** * Name: CRC-7/MMC x7+x3+1* Width: 7* Poly: 0x09* Init: 0x00* Refin: False* Refout: False* Xorout: 0x00* Use: MultiMediaCard,SD,ect.*****************************************************************************/ unsigned char CRC7_MMC(unsigned char *data, unsigned int datalen); /****************************Info********************************************** * Name: CRC-8 x8+x2+x+1* Width: 8* Poly: 0x07* Init: 0x00* Refin: False* Refout: False* Xorout: 0x00* Note:*****************************************************************************/ unsigned char CRC8(unsigned char *data, unsigned int datalen);/****************************Info********************************************** * Name: CRC-8/ITU x8+x2+x+1* Width: 8* Poly: 0x07* Init: 0x00* Refin: False* Refout: False* Xorout: 0x55*****************************************************************************/ unsigned char CRC8_ITU(unsigned char *data, unsigned int datalen);/****************************Info*********************************************** Name: CRC-8/ROHC x8+x2+x+1* Width: 8* Poly: 0x07* Init: 0xFF* Refin: True* Refout: True* Xorout: 0x00* Note:*****************************************************************************/ unsigned char CRC8_ROHC(unsigned char *data, unsigned int datalen); /****************************Info*********************************************** Name: CRC-8/MAXIM x8+x5+x4+1* Width: 8* Poly: 0x31* Init: 0x00* Refin: True* Refout: True* Xorout: 0x00* Alias: DOW-CRC,CRC-8/IBUTTON* Use: Maxim(Dallas)'s some devices,e.g. DS18B20*****************************************************************************/ unsigned char CRC8_MAXIM(unsigned char *data, unsigned int datalen); crc_4_5_6_7_8.cpp#include "crc_common.h"/****************************Info*********************************************** Name: CRC-4/ITU x4+x+1* Width: 4* Poly: 0x03* Init: 0x00* Refin: True* Refout: True* Xorout: 0x00* Note:*****************************************************************************/ unsigned char CRC4_ITU(unsigned char *data, unsigned int datalen){unsigned char wCRCin = 0x00;unsigned char wCPoly = 0x03;unsigned char wChar = 0;while (datalen--){wChar = *(data++);InvertUint8(&wChar,&wChar);wCRCin ^= (wChar);for(int i = 0;i < 8;i++){if(wCRCin & 0x80)wCRCin = (wCRCin << 1) ^ (wCPoly << 4);elsewCRCin = wCRCin << 1;}}InvertUint8(&wCRCin,&wCRCin);return (wCRCin);}/****************************Info*********************************************** Name: CRC-5/EPC x5+x3+1* Width: 5* Poly: 0x09* Init: 0x09* Refin: False* Refout: False* Xorout: 0x00* Note:*****************************************************************************/ unsigned char CRC5_EPC(unsigned char *data, unsigned int datalen){unsigned char wCRCin = 0x09<<3;unsigned char wCPoly = 0x09<<3;while (datalen--){wCRCin ^= *(data++);for(int i = 0;i < 8;i++){if(wCRCin & 0x80)wCRCin = (wCRCin << 1) ^ (wCPoly);elsewCRCin = wCRCin << 1;}}return (wCRCin >> 3);}/****************************Info*********************************************** Name: CRC-5/USB x5+x2+1* Width: 5* Poly: 0x05* Init: 0x1F* Refin: True* Refout: True* Xorout: 0x1F* Note:*****************************************************************************/#if 0unsigned char CRC5_USB(unsigned char *data, unsigned int datalen){unsigned char wCRCin = 0x1F<<3;unsigned char wCPoly = 0x05;unsigned char wChar = 0;while (datalen--){wChar = *(data++);InvertUint8(&wChar,&wChar);wCRCin ^= (wChar);for(int i = 0;i < 8;i++){if(wCRCin & 0x80)wCRCin = (wCRCin << 1) ^ (wCPoly << 3);wCRCin = wCRCin << 1;}}InvertUint8(&wCRCin,&wCRCin);return (wCRCin^0x1F);}#elseunsigned char CRC5_USB(unsigned char *data, unsigned int datalen) {unsigned char wCRCin = 0x1F;unsigned char wCPoly = 0x05;InvertUint8(&wCPoly,&wCPoly);while (datalen--){wCRCin ^= *(data++);for(int i = 0;i < 8;i++){if(wCRCin & 0x01)wCRCin = (wCRCin >> 1) ^ (wCPoly >> 3);elsewCRCin = wCRCin >> 1;}}return (wCRCin^0x1F);}#endif/****************************Info********************************************** * Name: CRC-5/ITU x5+x4+x2+1* Width: 5* Poly: 0x15* Init: 0x00* Refin: True* Refout: True* Xorout: 0x00* Note:*****************************************************************************/#if 0unsigned char CRC5_ITU(unsigned char *data, unsigned int datalen) {unsigned char wCRCin = 0x00;unsigned char wCPoly = 0x15;unsigned char wChar = 0;while (datalen--){wChar = *(data++);InvertUint8(&wChar,&wChar);wCRCin ^= (wChar);for(int i = 0;i < 8;i++){if(wCRCin & 0x80)wCRCin = (wCRCin << 1) ^ (wCPoly << 3);elsewCRCin = wCRCin << 1;}}InvertUint8(&wCRCin,&wCRCin);return (wCRCin);}#elseunsigned char CRC5_ITU(unsigned char *data, unsigned int datalen) {unsigned char wCRCin = 0x00;unsigned char wCPoly = 0x15;InvertUint8(&wCPoly,&wCPoly);while (datalen--){wCRCin ^= *(data++);for(int i = 0;i < 8;i++){if(wCRCin & 0x01)wCRCin = (wCRCin >> 1) ^ (wCPoly >> 3);elsewCRCin = wCRCin >> 1;}}return (wCRCin);}#endif/****************************Info********************************************** * Name: CRC-6/ITU x6+x+1* Width: 6* Poly: 0x03* Init: 0x00* Refin: True* Refout: True* Xorout: 0x00* Note:*****************************************************************************/ unsigned char CRC6_ITU(unsigned char *data, unsigned int datalen) {unsigned char wCRCin = 0x00;unsigned char wCPoly = 0x03;unsigned char wChar = 0;while (datalen--){wChar = *(data++);InvertUint8(&wChar,&wChar);wCRCin ^= (wChar);for(int i = 0;i < 8;i++){if(wCRCin & 0x80)wCRCin = (wCRCin << 1) ^ (wCPoly << 2);elsewCRCin = wCRCin << 1;}}InvertUint8(&wCRCin,&wCRCin);return (wCRCin);}/****************************Info********************************************** * Name: CRC-7/MMC x7+x3+1* Width: 7* Poly: 0x09* Init: 0x00* Refin: False* Refout: False* Xorout: 0x00* Use: MultiMediaCard,SD,ect.。
C语言程序设计的常用算法
3、合并法排序(将两个有序数组 A、B 合并成另一个有序的数组 C,升序) 基本思想: 1)先在 A、B 数组中各取第一个元素进行比较,将小的元素放入 C 数组;
2)取小的元素所在数组的下一个元素与另一数组中上次比较后较大的元素比较,重复上述 比较过程,直到某个数组被先排完; 3)将另一个数组剩余元素抄入 C 数组,合并排序完成。 程序代码如下: #include<stdio.h>
/////////////////////////////////////////////////////////////////////////////// void main() {
int x,i; int prime(int m); printf("please input a even number(>=6):"); scanf("%d",&x); if (x<6||x%2!=0)
int a[10],p,x,i; printf("please input the array:"); for(i=0;i<10;i++)
scanf("%d",&a[i]); printf("please input the number you want find:"); scanf("%d",&x); p=0; while(x!=a[p]&&p<10)
printf("%2d",c[i]); printf("\n"); }
C语言加密与解密常用的加密算法和协议
C语言加密与解密常用的加密算法和协议在计算机网络和信息安全领域,加密是一种广泛应用的技术,可以保护敏感数据的机密性和完整性。
C语言作为一种广泛使用的编程语言,提供了丰富的加密算法和协议的库函数,本文将介绍一些常用的加密算法和协议。
一、对称加密算法对称加密算法是指加密和解密使用相同密钥的算法,它的运算速度较快,适用于加密大量数据。
以下是几个常用的对称加密算法:1. DES(Data Encryption Standard)DES是一种基于对称密钥的加密算法,使用56位密钥进行加密和解密。
DES算法已经被证明在保护数据的机密性方面是有效的,但由于其较短的密钥长度,现在已经逐渐被更安全的算法取代。
2. AES(Advanced Encryption Standard)AES是一种高级加密标准算法,使用128、192或256位密钥进行加密和解密。
AES算法被广泛应用于各种领域,包括数据传输、硬盘加密和无线网络安全等。
它的安全性和性能都得到了广泛认可。
3. RC4(Rivest Cipher 4)RC4是一种流密码算法,它能够根据密钥流生成伪随机的密钥序列,并将明文与密钥序列进行异或操作,从而实现加密和解密功能。
尽管RC4算法在过去被广泛使用,但由于其存在一些安全漏洞,现在已经不推荐使用。
二、非对称加密算法非对称加密算法是指加密和解密使用不同密钥的算法,它能够提供更高的安全性,但性能较对称加密算法要低。
以下是几个常用的非对称加密算法:1. RSA(Rivest-Shamir-Adleman)RSA是一种基于大数因子分解的算法,广泛应用于数字签名、密钥交换和数据加密等领域。
它的安全性基于大数分解问题的困难性,目前被认为是非常安全的加密算法。
2. ECC(Elliptic Curve Cryptography)ECC是一种基于椭圆曲线的加密算法,它通过找到椭圆曲线上的一个点来生成公钥和私钥。
相较于RSA算法,ECC算法在提供相同安全性的情况下使用更短的密钥长度,从而提高了加密和解密的效率。
C语言的六种常用算法
C语言的六种常用算法C语言是一种非常流行的编程语言,广泛应用于各种领域中。
在C语言中,有许多常用的算法,可以用来解决各种问题。
下面我们将详细介绍C语言中的六种常用算法。
1.排序算法:排序算法可以将一组数据按照一定的规则进行排序。
常见的排序算法有冒泡排序、选择排序、插入排序、快速排序等。
这些排序算法的原理各有不同,但都可以实现对数据的排序。
排序算法对于处理大量数据的应用非常重要,可以提高查找、统计等操作的效率。
2.查找算法:查找算法是指在一组数据中寻找特定元素的过程。
常见的查找算法有线性查找、二分查找、哈希查找等。
这些算法的实现方式不同,但都可以高效地找到目标元素。
查找算法广泛应用于数据库查询、引擎等需要快速查找数据的场景中。
3.图算法:图算法是针对图结构进行的一系列操作。
图是由顶点和边组成的数据结构,可以用来表示各种关系。
在图算法中,常见的操作包括遍历、连通性判断、最短路径查找等。
图算法在网络分析、社交网络分析、运输规划等领域中有着广泛的应用。
4.动态规划算法:动态规划算法是一种解决多阶段决策问题的方法。
它将问题划分为若干个阶段,每个阶段都有一系列可选的决策。
通过求解每个阶段的最优决策,最终得到整个问题的最优解。
动态规划算法在最短路径问题、背包问题、序列比对等领域中有着重要的地位。
5.深度优先算法:深度优先算法是一种遍历图或树的方法。
它从一个起始节点开始,沿着一条路径尽可能远地,直到遇到死路才返回并尝试其他路径。
深度优先算法常用于解决迷宫问题、图的连通性判断等。
6.广度优先算法:广度优先算法是一种遍历图或树的方法。
它从一个起始节点开始,首先访问所有相邻节点,然后再访问它们的相邻节点,以此类推,直到遍历完所有节点。
广度优先算法常用于寻找最短路径、社交网络分析等。
以上就是C语言中的六种常用算法。
这些算法在各自的领域中有着广泛的应用,对于解决各种问题起到了重要的作用。
对于想要学习C语言的人来说,掌握这些算法是非常重要的一步。
C语言常用算法归纳
C语言常用算法归纳应当掌握的一般算法一、基本算法:交换、累加、累乘二、非数值计算常用经典算法:穷举、排序(冒泡,选择)、查找(顺序即线性)三、数值计算常用经典算法:级数计算(直接、简接即递推)、一元非线性方程求根(牛顿迭代法、二分法)、定积分计算(矩形法、梯形法)四、其他:迭代、进制转换、矩阵转置、字符处理(统计、数字串、字母大小写转换、加密等)、整数各数位上数字的获取、辗转相除法求最大公约数(最小公倍数)、求最值、判断素数(各种变形)、数组元素的插入(删除)、二维数组的其他典型问题(方阵的特点、杨辉三角形)详细讲解一、基本算法1.交换(两量交换借助第三者)例1、任意读入两个整数,将二者的值交换后输出。
main(){ int a,b,t;scanf("%d%d",&a,&b);printf("%d,%d\n",a,b);t=a; a=b; b=t;printf("%d,%d\n",a,b);}【解析】程序中加粗部分为算法的核心,如同交换两个杯子里的饮料,必须借助第三个空杯子。
假设输入的值分别为3、7,则第一行输出为3,7;第二行输出为7,3。
其中t为中间变量,起到“空杯子”的作用。
注意:三句赋值语句赋值号左右的各量之间的关系!【应用】例2、任意读入三个整数,然后按从小到大的顺序输出。
main(){ int a,b,c,t;scanf("%d%d%d",&a,&b,&c);/*以下两个if语句使得a中存放的数最小*/if(a>b){ t=a; a=b; b=t; }if(a>c){ t=a; a=c; c=t; }/*以下if语句使得b中存放的数次小*/if(b>c) { t=b; b=c; c=t; }printf("%d,%d,%d\n",a,b,c);}2.累加累加算法的要领是形如“s=s+A”的累加式,此式必须出现在循环中才能被反复执行,从而实现累加功能。
c语言常用算法
c语言常用算法一、前言C语言是一种高效、快速的编程语言,被广泛应用于各种领域。
在C 语言中,算法是非常重要的部分,因为它们能够帮助我们解决许多实际问题。
本文将介绍C语言中常用的算法。
二、排序算法1.冒泡排序冒泡排序是一种简单的排序算法,它通过不断交换相邻两个元素的位置来将最大的元素放到最后。
具体实现如下:```void bubble_sort(int arr[], int n) {for (int i = 0; i < n - 1; i++) {for (int j = 0; j < n - i - 1; j++) {if (arr[j] > arr[j + 1]) {int temp = arr[j];arr[j] = arr[j + 1];}}}}```2.选择排序选择排序也是一种简单的排序算法,它通过不断选择最小元素并放到前面来完成排序。
具体实现如下:```void selection_sort(int arr[], int n) {for (int i = 0; i < n - 1; i++) {int min_index = i;for (int j = i + 1; j < n; j++) {if (arr[j] < arr[min_index]) {min_index = j;}}int temp = arr[i];arr[i] = arr[min_index];}}```3.插入排序插入排序是一种简单的排序算法,它通过将元素逐个插入到已排好序的序列中来完成排序。
具体实现如下:```void insertion_sort(int arr[], int n) {for (int i = 1; i < n; i++) {int key = arr[i];int j = i - 1;while (j >= 0 && arr[j] > key) {arr[j + 1] = arr[j];j--;}arr[j + 1] = key;}}```4.快速排序快速排序是一种高效的排序算法,它通过选取一个基准元素并将数组分为两部分来完成排序。
用C语言编写数学常用算法
函数运算符用法一览表
表达式 f+g f+=g f+cos或 cos+f f+=cos f+a或a+f f+=a f.neg() -f f-g f-=g f-cos cos-f 表达式的执行使程序做的事及返回结果 产生并返回f(x)+g(x) 使f改为f(x)+g(x)并返回f的引用 产生并返回f(x)+cos(x)
产生并返回cos(x)/f(x) f改为f(x)/cos(x)并返回f的引用
f/a
a/f f/=a
产生并返回f(x)/a
产生并返回a/f(x) f改为f(x)/a并返回f的引用
f.power(g)
f^g f.power(a)
f改为f(x)的g(x)乘方函数并返回f的引用
产生并返回f(x)的g(x)乘方 f改为f(x)的a次方并返回f的引用
函数类的例
func f(sin); // 将正弦函数包装到一个函数类变量f中 cout << "sin(0.83) is"<< f(0.83) << "\n“; // 显示函数值sin(0.83) static double b[10][2] = {{0.1,0.94837}, {0.15, 0.860708}, {0.25,0.778801},{0.40,0.670320}, {0.5,0.606531}, {0.57,0.565525},{0.7,0.496585},{0.85,0.427415}, {0.93,0.394554},{1.0,0.367879}}; matrix m(b,10,2); // 用双精度实数数组b产生实矩阵变量 func g = funcenter2(m);// 用这十个坐标对产生不等距插值函数g(x) cout << “g(0.83) is”<<g(0.83) << “\n“; func h; // 产生新的函数类变量h h = f+g; // h被设为函数sin(x)+g(x) cout << "h(0.83) is"<<h(0.83)<<"\n";// 显示函数值h(0.83)为1.17398 cout << "integ h(x) from 0.1 to 0.9:" <<h.integ(0.1,0.9)<<"\n"; // 显示h从0.1到0.9的积分值0.872394
常用公式算法一览
常用公式算法一览这里有一些常见的数学公式和算法,涵盖了基础数学、代数、几何、概率统计等领域。
1. 基础数学乘法分配律:a × (b + c) = a × b + a × c除法分配律:(a + b) ÷ c = a ÷ c + b ÷ c乘法结合律:(a × b) × c = a × (b × c)除法结合律:(a ÷ b) ÷ c = a ÷ (b × c)2. 代数线性方程:ax + b = 0 的解为 x = -b/a(当a≠0)二次方程:ax^2 + bx + c = 0 的解为 x = [-b ± sqrt(b^2 - 4ac)] / (2a) (当b^2 - 4ac > 0)3. 几何勾股定理:直角三角形中,直角边的平方和等于斜边的平方,即 a^2 + b^2 = c^2圆的周长公式:C = 2πr圆的面积公式:A = πr^24. 概率统计期望值公式:E(X) = Σ(x_i P(X=x_i)),其中X是一随机变量,x_i是X的所有可能取值,P(X=x_i)是X取x_i的概率方差公式:D(X) = Σ((x_i - E(X))^2 P(X=x_i))正态分布:正态分布是一种常见的连续概率分布,其概率密度函数呈钟形。
正态分布的期望值μ和标准差σ决定了其形状。
5. 其他质数筛法(埃拉托斯特尼筛法):用于找出一定范围内的所有质数。
快速排序:一种高效的排序算法,其基本思想是分治法。
二分查找:在有序数组中查找某一特定元素的搜索算法。
搜索过程从数组的中间元素开始,如果中间元素正好是目标值,则搜索过程结束;如果目标值大于或小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且同样从中间元素开始比较。
如果在某一步骤数组为空,则代表找不到。
C语言常用算法
C语言常用算法归纳应当掌握的一般算法一、基本算法:交换、累加、累乘二、非数值计算常用经典算法:穷举、排序(冒泡,选择)、查找(顺序即线性)三、数值计算常用经典算法:级数计算(直接、简接即递推)、一元非线性方程求根(牛顿迭代法、二分法)、定积分计算(矩形法、梯形法)、矩阵转置四、其他:迭代、进制转换、字符处理(统计、数字串、字母大小写转换、加密等)、整数各数位上数字的获取、辗转相除法求最大公约数(最小公倍数)、求最值、判断素数(各种变形)、数组元素的插入(删除)、二维数组的其他典型问题(方阵的特点、杨辉三角形)详细讲解一、基本算法1.交换(两量交换借助第三者)例1、任意读入两个整数,将二者的值交换后输出。
main(){int a,b,t;scanf("%d%d",&a,&b);printf("%d,%d\n",a,b);t=a; a=b; b=t;printf("%d,%d\n",a,b);}【解析】程序中加粗部分为算法的核心,如同交换两个杯子里的饮料,必须借助第三个空杯子。
假设输入的值分别为3、7,则第一行输出为3,7;第二行输出为7,3。
其中t为中间变量,起到“空杯子”的作用。
注意:三句赋值语句赋值号左右的各量之间的关系!【应用】例2、任意读入三个整数,然后按从小到大的顺序输出。
main(){int a,b,c,t;scanf("%d%d%d",&a,&b,&c);/*以下两个if语句使得a中存放的数最小*/if(a>b){ t=a; a=b; b=t; }if(a>c){ t=a; a=c; c=t; }/*以下if语句使得b中存放的数次小*/if(b>c) { t=b; b=c; c=t; }printf("%d,%d,%d\n",a,b,c);}2.累加累加算法的要领是形如“s=s+A”的累加式,此式必须出现在循环中才能被反复执行,从而实现累加功能。
C语言常用算法大全
1.十进制数转二进制数#include<stdio.h>main(){int i,n,m;int a[16]={0};printf("please input the decimalism number(0~32767):\n"); scanf("%d",&n);for(m=0;m<15;m++){i=n%2;n=n/2;a[m]=i;}for(m=15;m>=0;m--){printf("%d",a[m]);if(m%4==0)printf("");}printf("\n");}2.十进制转十六进制数1)用格式控制的方式#include<stdio.h>main(){int i;printf("please input decimalism number:\n");scanf("%d",&i);printf("the hex number is %x\n",i);}2)除以基数取余法#include<stdio.h>main(){int i,n,m;int a[4]={0};printf("please input the decimalism number(0~32767):\n"); scanf("%d",&n);for(m=0;m<4;m++){i=n%16;n=n/16;a[m]=i;}for(m=3;m>=0;m--){printf("%d",a[m]);}printf("\n");}3.十进制转八进制数1)用格式控制的方式#include<stdio.h>main(){int i;printf("please input decimalism number:\n");scanf("%d",&i);printf("the hex number is %o\n",i);}2)除以基数取余法#include<stdio.h>main(){int i,n,m;int a[8]={0};printf("please input the decimalism number(0~32767):\n"); scanf("%d",&n);for(m=0;m<8;m++){i=n%8;n=n/8;a[m]=i;}for(m=7;m>=0;m--){printf("%d",a[m]);}printf("\n");}4.十进制转任意进制数#include<stdio.h>main(){int i,n,m,j;int a[8]={0};printf("please input the decimalism number(0~32767):\n"); scanf("%d",&n);printf("please input 基数:");scanf("%d",&j);for(m=0;m<8;m++){i=n%j;n=n/j;a[m]=i;}for(m=7;m>=0;m--){printf("%d",a[m]);}printf("\n");}5.n进制数转十进制数#include<stdio.h>#include<string.h>#include<stdlib.h>main(){long t1;int i,n,t,t3;char a[100];printf("please input a number string:\n");gets(a);strupr(a);//小写转大写t3=strlen(a);t1=0;printf("please input n(2or8or16):\n");scanf("%d",&n);for(i=0;i<t3;i++){if(a[i]-'0'>=n&&a[i]<'A'||a[i]-'A'+10>=n){printf("data error!!");exit(0);}if(a[i]>='0'&&a[i]<='9')t=a[i]-'0';else if(n>=11&&(a[i]>='A'&&a[i]<='A'+n-10))t=a[i]-'A'+10;t1=t1*n+t;}printf("the decimal is %ld\n",t1);}6.输入任意三个整数,按照从小到大的顺序排列并输出#include<stdio.h>main(){int a,b,c,t;printf("please input a,b,c,:\n");scanf("%d%d%d",&a,&b,&c);if(a>b){t=a;a=b;b=t;}if(a>c){t=a;a=c;c=t;}if(b>c){t=b;b=c;c=t;}printf("the order of the number is:\n");printf("%d,%d,%d",a,b,c);}7.判断闰年#include<stdio.h>main(){int year;printf("please input the year:\n");scanf("%d",&year);if((year%4==0&&year%100!=0)||year%400==0)printf("%d is a leap year",year);elseprintf("%d is not a leap year",year);}8.随机函数进行加减运算#include<stdio.h>#include<stdlib.h>#include<time.h>main(){int a,b,c,sign,max;char sign1;printf("please select sign(1 or other,1:-,other:+):\n");scanf("%d",&sign);printf("please select the max number(<10000):\n");scanf("%d",&max);srand((unsigned long)time(0));a=rand()%max;b=rand()%max;while((a<b)&&(sign==1)){a=rand()%max;b=rand()%max;}sign1=(sign==1?'-':'+');printf("\n%d%c%d=",a,sign1,b);scanf("%d",&c);if((sign==1)&&(a-b==c)||(sign!=1)&&(a+b==c))printf("OK!\n");elseprintf("The result is wrong\n");// getch();}9.模拟ATM机界面程序#include<stdio.h>#include<stdlib.h>#include<conio.h>int system(const char *string);main(){char Key,CMoney;int password,password1=123,i=0,a=1000;while(1){do{system("cls");printf("******************************\n");printf("* Please select key: *\n");printf("* 1.password *\n");printf("* 2.get money *\n");printf("* 3.Return *\n");printf("******************************\n");Key=getch();}while(Key!='1'&&Key!='2'&&Key!='3');/*当输入的值不是1,2,3中任意值时显示do循环体中的内容*/switch(Key){case'1':system("cls");do{i++;printf(" please input password: ");scanf("%d",&password);if(password1!=password){if(i>3){printf("Wrong!Press any key to exit... ");getch();exit(0);}elseputs("wrong,try again!");}}while(password1!=password&&i<3);/*如果密码不正确且输入次数小于等于3次,执行do循环体中的语句*/printf("OK!Press any key to continue...");//密码正确返回初始界面开始其他操作getch();break;case'2':do{system("cls");if(password1!=password)//如果在case1中密码输入不正确将无法进行后面操作{printf("please logging in,press any key to continue...");getch();break;}else{printf("******************************\n");printf(" Please select:\n");printf("* 1.$100 *\n");printf("* 2.$200 *\n");printf("* 3.$300 *\n");printf("* 4.Return *\n");printf("******************************\n");CMoney=getch();}}while(CMoney!='1'&&CMoney!='2'&&CMoney!='3'&&CMoney!='4'); //当输入值不是1,2,3,4中任意数将继续执行do循环体中语句switch(CMoney){case'1':system("cls");a=a-100;printf("**********************************************\n");printf("* Your Credit money is $100,Thank you! *\n");printf("* The balance is $%d. *\n",a);printf("* Press any key to return... *\n");getch();break;case'2':system("cls");a=a-200;printf("**********************************************\n");printf("* Your Credit money is $200,Thank you! *\n");printf("* The balance is $%d. *\n",a);printf("* Press any key to return... *\n");getch();break;case'3':system("cls");a=a-300;printf("**********************************************\n");printf("* Your Credit money is $300,Thank you! *\n");printf("* The balance is $%d. *\n",a);printf("* Press any key to return... *\n");getch();break;case'4':break;}break;case'3':printf("*****************************************\n");printf("* Thank you for using! *\n");printf("* Goodbye! *\n");printf("*****************************************\n");getch();exit(0);}continue;}}10.输出三角形图案#include<stdio.h>main(){int i,j,k;for(i=1;i<=5;i++){for(j=1;j<=5-i;j++)printf(" ");for(k=1;k<=2*i-1;k++)printf("#");printf("\n");}}//三重循环,最外层控制行数,次外层控制每行空格数,最里层控制输出的符号的个数11.输出菱形#include<stdio.h>main(){int i,j,k;for(i=1;i<=4;i++){for(j=1;j<=4-i;j++)printf(" ");for(k=1;k<=2*i-1;k++)printf("*");printf("\n");}for(i=1;i<=3;i++){for(j=1;j<=i;j++)printf(" ");for(k=1;k<=2*(4-i)-1;k++)printf("*");printf("\n");}}12.打印乘法口诀表#include<stdio.h>main(){int i,j;for(i=1;i<=9;i++){for(j=1;j<=i;j++)printf("%d*%d=%d ",i,j,i*j);printf("\n");}}13.打印杨辉三角下标从1开始#include<stdio.h>main(){int i,j,a[11][11];for(i=1;i<11;i++){a[i][i]=1;a[i][1]=1;}for(i=3;i<11;i++)for(j=2;j<=i-1;j++)a[i][j]=a[i-1][j-1]+a[i-1][j];for(i=1;i<11;i++){for(j=1;j<=i;j++)printf("%4d",a[i][j]);printf("\n");}}下标从0开始#include<stdio.h>main(){int i,j,a[11][11];for(i=0;i<11;i++){a[i][i]=1;a[i][0]=1;}for(i=2;i<11;i++)for(j=1;j<=i-1;j++)a[i][j]=a[i-1][j-1]+a[i-1][j];for(i=0;i<11;i++){for(j=0;j<=i;j++)printf("%4d",a[i][j]);printf("\n");}}14.求阶层1)用while循环:#include<stdio.h>main(){int i=2,n;float fac=1;printf("please input an interger>=0.\n");scanf("%d",&n);if(n==0||n==1){printf("factorial is 1.\n");return 0;}while(i<=n){fac=fac*i;i++;}printf("factorial of%d is:%.2f\n",n,fac);}2)用递归:#include<stdio.h>float f(int n){int i=1;if(n==0||n==1)return 1;elsereturn n*f(n-1);}main(){int n;printf("please input an interger>=0.\n");scanf("%d",&n);printf("factorial of%d is:%.2f\n",n,f(n));}15.求一个数的因子#include<stdio.h>main(){int i,j;printf("Please input:\n");scanf("%d",&i);for(j=1;j<=i;j++)if(i%j==0)printf("%d,",j);}16.一元钱兑换问题(兑换成一角两角五角)#include<stdio.h>main(){int i,j,k;for(i=0;i<=10;i++)for(j=0;j<=5;j++)for(k=0;k<=2;k++)if(i+2*j+5*k==10)printf("yijiao%d,liangjiao%d,wujiao%d\n",i,j,k); }17.对调数问题(找出两个正整数之和等于各自对调之后的数之和)#include<stdio.h>main(){int x,y,z,x1,y1,z1,i,k,n,j=0;while(1){printf("Please input an interger(11~99):\n");scanf("%d",&n);if(n<=10||n>=100)//当输入的数小于10或者大于100时输出错误{printf("data error!\n");continue;}else if(n%10==0){printf("data error!\n");continue;}else{x=n/10;y=n%10;z=10*y+x;break;}}for(i=11;i<100;i++){if(i%10==0)continue;else{x1=i/10;y1=i%10;z1=10*y1+x1;if(n+i==z+z1&&n!=z1)//当满足n加i等于n的对调数加i的对调数且n和i不互为对调数{printf("%d+%d=%d+%d\n",n,i,z,z1);j++;}elsecontinue;}}if(j==0)//j为0表示不存在这样的数printf("inexistance");}18.对调最大数和最小数#include<stdio.h>main(){int a[20],max,min,i,j,k,n;//j记录每次比较中较小的数的下标,k记录每次比较中较大的数的下标printf("please input the number of elements(<20):\n");scanf("%d",&n);printf("please input the element:\n");for(i=0;i<n;i++)scanf("%d",&a[i]);max=min=a[0];for(i=1;i<n;i++){if(a[i]<min){min=a[i];j=i;}if(a[i]>max){max=a[i];k=i;}}a[k]=min;//在最大数的位置放置最小数a[j]=max;//在最小数的位置放置最大数printf("the position of min is:%3d\n",j);printf("the position of max is:%3d\n",k);printf("Now the array is :\n");for(i=0;i<n;i++)printf("%5d",a[i]);}19.二维数组行列互换#include<stdio.h>main(){int i,j,i1,j1,a[100][100],b[100][100];//i1,j1用来存放行数和列数的最大值printf("please input the number of rows(<=100)\n:");scanf("%d",&i1);printf("please input the number of columns(<=100)\n:");scanf("%d",&j1);printf("please input the element:\n");for(i=0;i<i1;i++)for(j=0;j<j1;j++)scanf("%d",&a[i][j]);printf("array a:\n");for(i=0;i<i1;i++){for(j=0;j<j1;j++)printf("%5d ",a[i][j]);printf("\n");}for(i=0;i<i1;i++)for(j=0;j<j1;j++)b[j][i]=a[i][j];printf("array b:\n");for(i=0;i<j1;i++){for(j=0;j<i1;j++)printf("%5d",b[i][j]);printf("\n");}}20.打印五阶幻方(每一行、每一列和对角线之和均相等)按如下步骤:1)将1放在第一行中间一列。
crc16常见的标准算法及c语言实现
crc16常见的标准算法及c语言实现CRC16是一种常用的校验算法,用于检测数据传输或存储过程中是否发生错误。
CRC16有多种标准算法,其中最常见的是CRC-16-CCITT和CRC-16-XMODEM。
以下是CRC-16-CCITT的C语言实现:```c#include <stdint.h>uint16_t crc16_ccitt(uint8_t *data, size_t length) {uint16_t crc = 0xFFFF;while (length--) {crc ^= *data++ << 8;for (size_t i = 0; i < 8; i++) {if (crc & 0x8000) {crc = (crc << 1) ^ 0x1021;} else {crc <<= 1;}}}return crc;}```以下是CRC-16-XMODEM的C语言实现:```c#include <stdint.h>uint16_t crc16_xmodem(uint8_t *data, size_t length) { uint16_t crc = 0xFFFF;while (length--) {crc ^= *data++ << 8;for (size_t i = 0; i < 8; i++) {if (crc & 0x8000) {crc = (crc << 1) ^ 0x04C11DB7;} else {crc <<= 1;}}}return crc;}```需要注意的是,以上代码中的数据是按照字节顺序进行处理的,因此在使用时需要保证数据没有字节序问题。
另外,CRC算法的实现取决于具体的标准,不同的标准可能会使用不同的初始值、多项式和反转字节顺序等参数。
因此,在实际使用时需要根据具体的标准选择合适的实现方式。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1 排序算法1.1 冒泡排序/*函数功能:对数组中的某一部分进行冒泡排序。
函数原形:void BubSort(DataType a[], int l, int r, bool Up=true);参数:DataType a[]:欲排序的数组;int l:有序序列在数组中的起始位置;int r:有序序列在数组中的结束位置;bool Up:true按升序排列,false按降序排列。
返回值:无。
备注:无。
*/template <typename DataType>void BubSort(DataType a[], int l, int r, bool Up=true){int i,j;DataType k;if (Up){for (i=l;i<=r-1;i++)for (j=r;j>=i+1;j--)if (a[j-1]>a[j]){k=a[j-1];a[j-1]=a[j];a[j]=k;}}elsefor (i=l;i<=r-1;i++)for (j=r;j>=i+1;j--)if (a[j-1]<a[j]){k=a[j-1];a[j-1]=a[j];a[j]=k;}}1.2 选择排序/*函数功能:对数组中的某一部分进行选择排序。
函数原形:void SelectSort(DataType a[], int l, int r, bool Up=true); 参数:DataType a[]:欲排序的数组;int l:有序序列在数组中的起始位置;int r:有序序列在数组中的结束位置;bool Up:true按升序排列,false按降序排列。
返回值:无。
备注:无。
*//*普通版*/template <typename DataType>void SelectSort(DataType a[], int l, int r, bool Up=true){int i,j;DataType k;if (Up){for (i=l;i<=r-1;i++)for (j=i+1;j<=r;j++)if (a[i]>a[j]){k=a[i];a[i]=a[j];a[j]=k;}}elsefor (i=l;i<=r-1;i++)for (j=i+1;j<=r;j++)if (a[i]<a[j]){k=a[i];a[i]=a[j];a[j]=k;}}/*优化版*/template <typename DataType>void SelectSort(DataType a[], int l, int r, bool Up=true){int i,j,k;DataType x;if (Up){for (i=l;i<=r-1;i++){k=i;for (j=i+1;j<=r;j++)if (a[j]<a[k]) k=j;x=a[i];a[i]=a[k];a[k]=x;}}elsefor (i=l;i<=r-1;i++){k=i;for (j=i+1;j<=r;j++)if (a[j]>a[k]) k=j;x=a[i];a[i]=a[k];a[k]=x;}}1.3 插入排序/*函数功能:向有序数组中插如元素,并使插入新元素后仍然有序。
函数原形:void InsertSort(DataType s[], int &Count, DataType x, bool Up=true); 参数:DataType s[]:欲插入元素的有序序列;int &Count:有序序列中现有元素个数;DataType x:欲插入的元素;bool Up:true按升序排列,false按降序排列。
返回值:无。
备注:无。
*/template <typename DataType>void InsertSort(DataType s[], int &Count, DataType x, bool Up=true){int i,k=-1;if (Up){for (i=0;i<=Count-1;i++)if (x<s[i]){k=i;break;}}elsefor (i=0;i<=Count-1;i++)if (x>s[i]){k=i;break;}if (k==-1) s[++Count-1]=x;else{for (i=Count-1;i>=k;i--) s[i+1]=s[i];s[k]=x;Count++;}}1.4 快速排序/*函数功能:对数组中的某一部分进行快速排序。
函数原形:void QuickSort(DataType a[], int l, int r, bool Up=true); 参数:DataType a[]:欲排序的数组;int l:有序序列在数组中的起始位置;int r:有序序列在数组中的结束位置;bool Up:true按升序排列,false按降序排列。
返回值:无。
备注:无。
*/template <typename DataType>void QuickSort(DataType a[], int l, int r, bool Up=true){int i,j;DataType Mid,k;i=l;j=r;Mid=a[(l+r)/2];if (Up){do{while (a[i]<Mid) ++i;while (Mid<a[j]) --j;if (i<=j){k=a[i];a[i]=a[j];a[j]=k;++i;--j;}} while (i<=j);}elsedo{while (a[i]>Mid) ++i;while (Mid>a[j]) --j;if (i<=j){k=a[i];a[i]=a[j];a[j]=k;++i;--j;}} while (i<=j);if (i<r) QuickSort(a,i,r,Up);if (l<j) QuickSort(a,l,j,Up);}1.5 哈希排序/*函数功能:对数组中的某一部分进行哈希排序。
函数原形:void QuickSort(DataType a[], int l, int r, bool Up=true); 参数:DataType a[]:欲排序的数组;int l:有序序列在数组中的起始位置;int r:有序序列在数组中的结束位置;bool Up:true按升序排列,false按降序排列。
返回值:无。
备注:只能对0~32767范围内的整数排序。
*/void HashSort(int a[], int l, int r, bool Up=true){int i,j,k,Hash[32767]={0};for (i=l;i<=r;i++) Hash[a[i]]++;k=l;if (Up){for (i=0;i<=32767-1;i++){for (j=1;j<=Hash[i];j++) a[k++]=i;if (k>r) break;}}elsefor (i=32767-1;i>=0;i--){for (j=1;j<=Hash[i];j++) a[k++]=i;if (k>r) break;}}2 数学问题2.1 求最大公约数最小公倍数/*函数功能:求两数的最大公约数。
函数原形:int GCD(int m, int n);参数:int m, int n:求这两个数的最大公约数。
返回值:int型,m、n的最大公约数。
备注:最小公倍数=m*n/GCD(m,n)。
*/int GCD(int m, int n){int Temp,x,y;x=m;y=n;Temp=x%y;while (Temp!=0){x=y;y=Temp;Temp=x%y;}return y;}2.2 求素数2.2.1 穷举法/*函数功能:判断一个数是否是素数。
函数原形:bool Prime(int x);参数:int x:欲判断的数。
返回值:bool型,返回true表示x是素数,返回false表示x不是素数。
备注:需包含头文件<math.h>。
*/bool Prime(int x){int i;x=abs(x);if (x<=1) return false;for (i=2;i<=int(sqrt(float(x)));i++)if (x%i==0) return false;return true;}2.2.2筛法/*函数功能:判断小于等于n的数是否是素数。
函数原形:void Prime(bool Hash[], int n);参数:bool Hash[]:最终结果,Hash[i]=true表示i是素数,否则表示i不是素数;int n:判断范围。
返回值:无。
备注:无。
*/void Prime(bool Hash[], int n){int i,k;Hash[0]=false;Hash[1]=false;for (i=2;i<=n;i++) Hash[i]=true;i=2;while (i<=n/2){k=i;while (k+i<=n){k=k+i;Hash[k]=false;}i++;while (Hash[i]==false && i<n) i++;}}2.3 排列组合2.3.1 排列数/*函数功能:排列数公式A(m,n)。
函数原形:int A(int m, int n);参数:int m, int n:排列数公式的两个参数。
返回值:int 型,排列数。
备注:无。
*/int A(int m, int n){int i,Ans;Ans=1;for (i=1;i<=m;i++){Ans=Ans*n;n--;}return Ans;}2.3.2 组合数/*函数功能:组合数公式C(m,n)。
函数原形:int C(int m, int n);参数:int m, int n:组合数公式的两个参数。
返回值:int 型,组合数。
备注:无。
*/int C(int m, int n){int i,Ans;Ans=1;for (i=1;i<=m;i++){Ans=Ans*n;n--;}for (i=2;i<=m;i++) Ans=Ans/i;return Ans;}2.3.3 全排列算法/*函数功能:输出n的全排列。
函数原形:void Arrange(int n);参数:int n:全排列元素个数。