数论资料Word文档下载推荐.docx

上传人:b****6 文档编号:18651523 上传时间:2022-12-30 格式:DOCX 页数:15 大小:19.10KB
下载 相关 举报
数论资料Word文档下载推荐.docx_第1页
第1页 / 共15页
数论资料Word文档下载推荐.docx_第2页
第2页 / 共15页
数论资料Word文档下载推荐.docx_第3页
第3页 / 共15页
数论资料Word文档下载推荐.docx_第4页
第4页 / 共15页
数论资料Word文档下载推荐.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

数论资料Word文档下载推荐.docx

《数论资料Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数论资料Word文档下载推荐.docx(15页珍藏版)》请在冰豆网上搜索。

数论资料Word文档下载推荐.docx

j++)

a[j]=a[j]*i+c;

c=a[j]/10000;

a[j]=a[j]%10000;

}

if(c>

0){m++;

a[m]=c;

w=m*4+log10(a[m])+1;

printf("

\n%ld"

a[m]);

for(i=m-1;

i>

=0;

i--)printf("

%4.4ld"

a[i]);

returnw;

2.精度计算——乘法(大数乘小数)

mult(charc[],chart[],intm);

c[]:

被乘数,用字符串表示,位数不限

t[]:

结果,用字符串表示

m:

乘数,限定10以内

null

需要string.h

voidmult(charc[],chart[],intm)

inti,l,k,flag,add=0;

chars[100];

l=strlen(c);

for(i=0;

l;

s[l-i-1]=c[i]-'

0'

;

for(i=0;

k=s[i]*m+add;

if(k>

=10){s[i]=k%10;

add=k/10;

flag=1;

}else{s[i]=k;

flag=0;

add=0;

if(flag){l=i+1;

s[i]=add;

}elsel=i;

t[l-1-i]=s[i]+'

t[l]='

\0'

3.精度计算——乘法(大数乘大数)

mult(chara[],charb[],chars[]);

a[]:

b[]:

乘数,用字符串表示,位数不限

空间复杂度为o(n^2)

voidmult(chara[],charb[],chars[])

inti,j,k=0,alen,blen,sum=0,res[65][65]={0},flag=0;

charresult[65];

alen=strlen(a);

blen=strlen(b);

alen;

for(j=0;

blen;

j++)res[i][j]=(a[i]-'

)*(b[j]-'

);

for(i=alen-1;

i--)

for(j=blen-1;

j>

j--)sum=sum+res[i+blen-j-1][j];

result[k]=sum%10;

k=k+1;

sum=sum/10;

for(i=blen-2;

=i;

j++)sum=sum+res[i-j][j];

if(sum!

=0){result[k]=sum;

k;

i++)result[i]+='

for(i=k-1;

i--)s[i]=result[k-1-i];

s[k]='

while

(1)

if(strlen(s)!

=strlen(a)&

&

s[0]=='

strcpy(s,s+1);

else

break;

4.精度计算——加法

add(chara[],charb[],chars[]);

voidadd(chara[],charb[],charback[])

inti,j,k,up,x,y,z,l;

char*c;

if(strlen(a)>

strlen(b))l=strlen(a)+2;

elsel=strlen(b)+2;

c=(char*)malloc(l*sizeof(char));

i=strlen(a)-1;

j=strlen(b)-1;

k=0;

up=0;

while(i>

=0||j>

=0)

if(i<

0)x='

elsex=a[i];

if(j<

0)y='

elsey=b[j];

z=x-'

+y-'

if(up)z+=1;

if(z>

9){up=1;

z%=10;

elseup=0;

c[k++]=z+'

i--;

j--;

if(up)c[k++]='

1'

i=0;

c[k]='

for(k-=1;

k>

k--)

back[i++]=c[k];

back[i]='

5.精度计算——减法

sub(chars1[],chars2[],chart[]);

s1[]:

被减数,用字符串表示,位数不限

s2[]:

减数,用字符串表示,位数不限

默认s1>

=s2,程序未处理负数情况

voidsub(chars1[],chars2[],chart[])

inti,l2,l1,k;

l2=strlen(s2);

l1=strlen(s1);

t[l1]='

l1--;

for(i=l2-1;

i--,l1--)

if(s1[l1]-s2[i]>

=0)

t[l1]=s1[l1]-s2[i]+'

t[l1]=10+s1[l1]-s2[i]+'

s1[l1-1]=s1[l1-1]-1;

k=l1;

while(s1[k]<

0){s1[k]+=10;

s1[k-1]-=1;

k--;

while(l1>

=0){t[l1]=s1[l1];

loop:

if(t[0]=='

l1-1;

i++)t[i]=t[i+1];

t[l1-1]='

gotoloop;

if(strlen(t)==0){t[0]='

t[1]='

6.任意进制转换

conversion(chars1[],chars2[],longd1,longd2);

s[]:

原进制数字,用字符串表示

转换结果,用字符串表示

d1:

原进制数

d2:

需要转换到的进制数

高于9的位数用大写'

A'

~'

Z'

表示,2~16位进制通过验证

voidconversion(chars[],chars2[],longd1,longd2)

longi,j,t,num;

charc;

num=0;

s[i]!

='

if(s[i]<

9'

s[i]>

)t=s[i]-'

elset=s[i]-'

+10;

num=num*d1+t;

t=num%d2;

if(t<

=9)s2[i]=t+'

elses2[i]=t+'

-10;

num/=d2;

if(num==0)break;

i++;

i/2;

{c=s2[j];

s2[j]=s[i-j];

s2[i-j]=c;

s2[i+1]='

8.组合序列

m_of_n(intm,intn1,intm1,int*a,inthead)

组合数C的上参数

n1:

组合数C的下参数

m1:

组合数C的上参数,递归之用

*a:

1~n的整数序列数组

head:

头指针

*a需要自行产生

初始调用时,m=m1、head=0

调用例子:

求C(m,n)序列:

m_of_n(m,n,m,a,0);

voidm_of_n(intm,intn1,intm1,int*a,inthead)

inti,t;

if(m1<

0||m1>

n1)return;

if(m1==n1)

for(i=0;

m;

i++)cout<

<

a[i]<

'

'

//输出序列

cout<

\n'

return;

m_of_n(m,n1-1,m1,a,head);

//递归调用

t=a[head];

a[head]=a[n1-1+head];

a[n1-1+head]=t;

m_of_n(m,n1-1,m1-1,a,head+1);

//再次递归调用

素数表

//用素数表判定素数,先调用initprime

intplist[10000],pcount=0;

intprime(intn){

inti;

if((n!

=2&

!

(n%2))||(n!

=3&

(n%3))||(n!

=5&

(n%5))||(n!

=7&

(n%7)))

return0;

plist[i]*plist[i]<

if(!

(n%plist[i]))

return0;

returnn>

1;

voidinitprime(){

for(plist[pcount++]=2,i=3;

50000;

if(prime(i))

plist[pcount++]=i;

素数随机判定(miller_rabin)

//millerrabin

//判断自然数n是否为素数

//time越高失败概率越低,一般取10到50

#include<

stdlib.h>

#ifdefWIN32

typedef__int64i64;

#else

typedeflonglongi64;

#endif

intmodular_exponent(inta,intb,intn){//a^bmodn

intret;

for(;

b;

b>

>

=1,a=(int)((i64)a)*a%n)

if(b&

ret=(int)((i64)ret)*a%n;

//Carmichealnumber:

561,41041,825265,321197185

intmiller_rabin(intn,inttime=10){

if(n==1||(n!

while(time--)

if(modular_exponent(((rand()&

0x7fff<

16)+rand()&

0x7fff+rand()&

0x7fff)%(n-1)+1,n-1,n)!

=1)

return1;

矩阵乘法

1.void 

Multiply 

(int 

a[100][100], 

int 

b[100][100],int 

c[100][100]) 

 

2. 

3. 

i, 

j, 

4. 

5. 

for 

(i 

0;

row_a;

i++) 

6. 

7. 

(j 

column_b;

j++) 

8. 

9. 

c[i][j] 

10. 

(k 

column_a;

k++) 

11. 

12. 

+= 

a[i][k] 

b[k][j];

13. 

14. 

15. 

16. 

N皇后问题

1.#include 

stdio.h>

2.#include 

math.h>

3.#include<

iostream>

4.using 

namespace 

std;

6.int 

main() 

7.{ 

n,temp=0;

cin>

n;

f[20];

if(n%6!

n%6!

=3) 

if(n%2==0) 

for(int 

i=2;

i+=2) 

f[temp++]=i;

17. 

i=1;

=n-1;

18. 

19. 

20. 

else 

21. 

22. 

23. 

24. 

25. 

26. 

27. 

28. 

29. 

30. 

31. 

32. 

33. 

k=n/2;

34. 

if(k%2==0) 

35. 

36. 

i=k;

37. 

38. 

=k-2;

39. 

40. 

i=k+3;

41. 

42. 

=k+1;

43. 

44. 

45. 

46. 

47. 

48. 

49. 

50. 

51. 

52. 

53. 

54. 

55. 

56. 

57. 

58. 

59. 

k=(n-1)/2;

60. 

61. 

62. 

63. 

64. 

65. 

66. 

=n-2;

67. 

68. 

69. 

70. 

f[temp++]=n;

71. 

72. 

73. 

74. 

75. 

76. 

77. 

78. 

79. 

80. 

81. 

82. 

83. 

84. 

85. 

86. 

87. 

i++) 

88. 

i+1<

"

f[i]<

endl;

89. 

return 

90. 

91.} 

大数幂模

1.#include<

2

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 农学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1