《2022年密码学随机全排列生成程序及其应用开发实验一报告 .pdf》由会员分享,可在线阅读,更多相关《2022年密码学随机全排列生成程序及其应用开发实验一报告 .pdf(5页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、实验报告课程:班级:学号:姓名:实验日期:指导老师:实验序号:实验一实验题目:随机全排列生成程序及其应用开发实验成绩:实验评语:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 5 页 - - - - - - - - - 一实验内容:编制生成0n(n 255)的一个全排列的程序,可选择下列两个方法之一或自行设计另外方法:方法 1: 从一个随机文件读取n+1 字节数据d0,d1,? ,dn。 由预先取定的一个0n 的全排列P(比如, 可为 0n 的自然排列) 开始,依次对i=
2、n,n-1,? ,1,计算:j=di-1+di(mod i)交换 P 的第i 项第 j 项(在此注意我们假定P 从第0 项开始)。方法 2:用一个随机函数产生m(mn)字节数据d1,d2,? ,dm。对d1(mod(n+1), d2(mod(n+1) ,dm(mod(n+1) 依次考察,把后面出现的与前相同者去掉;在最后剩下的数据中,把没有出现的0n 依序补写于后面。二实验设计 :我采用的是另外一种方法,通过构造两个数组,给一个数组赋值,它包含的内容为:ai=i, 0im, m 为我们所需的随机数个数。另外一个数组中包含的是生成随机数主要程序所生成的m 个随机数。通过将srand( (unsi
3、gned)time( NULL ) )和 rand()%m 相结合来产生随机数。然后,运用替换的思想,建立swap函数操作这两个数组,避免了输出随机数有重复的情况。最后输出不重复的随机数m 个随机数。具体代码请见下面实验代码。三实验代码:有两种实验代码1:#include stdio.h #include stdlib.h #include time.h swap(int *pm,int *pn) int temp; temp=*pm; *pm=*pn; *pn=temp; void main() int i; int a256; int n=256; int m; start: printf
4、(n此程序可产生范围在0 到 255 的随机数 n); printf(n请输入你所需使用的随机数个数(不大于256):n); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 5 页 - - - - - - - - - scanf(%d,&m); if( mn ) printf(n 输入数 %d 比%d大, 请重新输入!n,m,n); goto start; srand( (unsigned)time( NULL ) ); for(i=0; i=0; i-) /* pa=&
5、ai; pb=&arand()%m+0;*/ swap(&ai, &arand()%m+0); /这表示是样为了使产生的随机数中包含0 printf(-n 以下为产生的不重复的随机数:n) ; for(i=0; i=m-1; i+) printf(%dt,ai ); 2. #include stdio.h #include stdlib.h #define N 256 char PN; char dN; char *full_array(int n) int i,j; char filename20; FILE *fp; char temp; start: printf(n请输入随机数据采样文
6、件名:n); scanf(%s,filename); if(fp=fopen(filename,rb)=NULL) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 5 页 - - - - - - - - - printf(没有找到文件:%sn,filename); goto start; fread(d,n+1,1,fp); fclose(fp); printf(n原文件中的字母序列如下:); for(i=0;i=n;i+) if(i)%8=0) printf(n); p
7、rintf(d%d=%c ,i,di); printf(nn取定自然排列如下:); for(i=0;i0;i-) j=(di-1+di)%i; temp=Pi; Pi=Pj; Pj=temp; return(P); void main() int num,i; printf(输入要进行全排列的字母个数:n); scanf(%d,&num); full_array(num-1); printf(nn随机排列后的新排列为:); for(i=0;inum;i+) if(i)%8=0) printf(n); printf(%d(%c) ,i,dPi); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 5 页 - - - - - - - - - */ 四实验调试与分析:五实验总结:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 5 页 - - - - - - - - -