?? mh.c
字號:
#include "stdlib.h"
int increase(int num,int a[])/*num為超遞增的個數,數組a為存放生成的結果,且數組中只有0,num-1是有用數*/
{int i,sum;
randomize();/*隨機函數的初始化,為庫函數*/
a[0]=1+random(num);
sum=a[0];
for(i=1;i<num;i++)
{ a[i]=sum+1+random(i);
sum=sum+a[i];
}
}
求一個數w在MOD N 下的逆元w-1函數;
int inv(int xin,long n0) /*求xin*xin-1=1 mod n0*/
{
long n1,n2,q,r,b1,b2,t;
if(xin==0)
b2=0;
else
{ n1=n0;n2=xin;b2=1;b1=0;
do{
r=(n1%n2);
q=(n1-r)/n2;
if(r==0)
{if(b2<0) b2=n0+b2;}
else
{n1=n2;n2=r;
t=b2;
b2=b1-q*b2;b1=t;
}
}while(r!=0);
}
return(b2);
}
求兩個數的最大公約數函數,該函數可用于檢測兩個數是否互素;
int gcd(int a,int b)
{int t;
t=a;
while(!((a%t==0)&&(b%t==0))) t--;
return t;
}
整數N和w選擇函數;
sele_n_w(int num,int s[],int b[])/*num為超遞增的個數,數組s為調用時傳超遞增數組的地址,數組b為存放N和w,其中b[0]存放N,b[1]存放w*/
{int i;
b[0]=2*s[num-1]+random(num)+1;
while(1)
{
b[1]=s[num-1]+random(s[num-1])+1;
if(gcd(b[1],b[0])==1) break;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -