當前位置:首頁 » 操作系統 » c實現演算法代碼

c實現演算法代碼

發布時間: 2024-01-07 01:59:12

『壹』 求用c語言編寫程序RSA演算法

這個是我幫個朋友寫的,寫的時候發現其實這個沒那麼復雜,不過,時間復雜度要高於那些成型了的,為人所熟知的RSA演算法的其他語言實現.

#include <stdio.h>
int candp(int a,int b,int c)
{ int r=1;
b=b+1;
while(b!=1)
{
r=r*a;
r=r%c;
b--;
}
printf("%d",r);
return r;
}
void main()
{
int p,q,e,d,m,n,t,c,r;
char s;
{printf("input the p:\n");<br/> scanf("%d\n",&p);<br/> printf("input the q:\n");<br/> scanf("%d%d\n",&p); <br/> n=p*q;<br/> printf("so,the n is %3d\n",n);<br/> t=(p-1)*(q-1);<br/> printf("so,the t is %3d\n",t);<br/> printf("please intput the e:\n");<br/> scanf("%d",&e);<br/> if(e<1||e>t)<br/> {printf("e is error,please input again;");<br/> scanf("%d",&e);}
d=1;
while (((e*d)%t)!=1) d++;
printf("then caculate out that the d is %5d",d);
printf("if you want to konw the cipher please input 1;\n if you want to konw the plain please input 2;\n");
scanf("%d",&r);
if(r==1)
{
printf("input the m :" );/*輸入要加密的明文數字*/
scanf("%d\n",&m);
c=candp(m,e,n);
printf("so ,the cipher is %4d",c);}

if(r==2)
{
printf("input the c :" );/*輸入要解密的密文數字*/
scanf("%d\n",&c);
m=candp(c,d,n);
printf("so ,the cipher is %4d\n",m);
printf("do you want to use this programe:Yes or No");
scanf("%s",&s);
}while(s=='Y');

}
}

『貳』 c語言求素數的演算法

根據素數的性質,代碼設計如下:

設計一:判斷n是否能被1~n-1整除,不能整除為素數

#include<stdio.h>

int main()

{

int i, n;

scanf("%d", &n);

for (i = 2; i < n ; i++)

{

if (n%i == 0)

break;

}

if (i < n) printf("This is not a prime.");

else printf("This is a prime.");

return 0;

}

設計二:判斷n是否能被2~√n間的整數整除,不能整除為素數

#include<stdio.h>

#include<math.h>

int main()

{

int n,i;

double k;

scanf("%d", &n);

k = sqrt(n);

for (i = 2; i <= k;i++)

{

if (n%i == 0) break;

}

if (i <=k) printf("This is not a prime.");

else printf("This is a prime");

return 0;

}

(2)c實現演算法代碼擴展閱讀:

1.素數的定義是只能被1和他本身整除,1不是素數.因此要判斷一個數是否為素數.就要判斷它能不能被比他小的所有素數整除,這是一個演算法.(寫到演算法時,我只能寫出用它除以比他小的所有數,造成運算速度低下)

2.如果一個質數大於根號n,而n可以除盡它,那麼n必然也可以除盡一個更小的質數。由此可以得到一個法2較快的素數判斷演算法

『叄』 用C語言編寫一個快速排序演算法 輸入10個數

1、「快速排序法」使用的是遞歸原理,下面一個例子來說明「快速排序法」的原理。首先給出一個數組{53,12,98,63,18,72,80,46, 32,21},先找到第一個數--53,把它作為中間值,也就是說,要把53放在一個位置,使得它左邊的值比它小,右邊的值比它大。{21,12,32, 46,18,53,80,72,63,98},這樣一個數組的排序就變成了兩個小數組的排序--53左邊的數組和53右邊的數組,而這兩個數組繼續用同樣的方式繼續下去,一直到順序完全正確。一般來說,冒泡法是程序員最先接觸的排序方法,它的優點是原理簡單,編程實現容易,但它的缺點就是速度太慢。
2、快速排序代碼:

#include<stdio.h>
voidquicksort(inta[],intleft,intright)
{
inti,j,temp;
i=left;
j=right;
temp=a[left];
if(left>right)
return;
while(i!=j)
{
while(a[j]>=temp&&j>i)
j--;
if(j>i)
a[i++]=a[j];
while(a[i]<=temp&&j>i)
i++;
if(j>i)
a[j--]=a[i];

}
a[i]=temp;
quicksort(a,left,i-1);
quicksort(a,i+1,right);
}
voidmain()
{
inta[]={53,12,98,63,18,72,80,46,32,21};
inti;
quicksort(a,0,9);
/*排好序的結果*/
for(i=0;i<10;i++)
printf("%4d ",a[i]);
}

『肆』 用c語言編程如何實現求和的程序代碼

1、首先把頭文件,main函數寫好#include<stdio.h> main(),如下圖所示。

『伍』 演算法編程:用c語言實現

解決這類問題可以使用 回溯 演算法,代碼如下:

#include<stdio.h>
#include<stdlib.h>

#defineM6//候選數字個數
#defineN5//組合後數字位數

intcheck(intresult[],inti)
{
for(intj=0;j<N;j++)
if(result[j]==i)
return0;

return1;
}

intlist(intnumbers[],intl,intresult[],intcount)
{
if(l>=N){

//將各位數組合成一個數
intnum=0;
for(inti=0;i<N;i++){
num=num*10+numbers[result[i]];
}

//判斷這個數是否能被75整除
if(num%75==0){
printf("%d ",num);
count++;
}

returncount;
}

for(inti=0;i<M;i++){

if(!check(result,i)){
continue;
}

result[l]=i;

count=list(numbers,l+1,result,count);

result[l]=-1;
}

returncount;
}

intmain()
{
intnumbers[M]={1,2,5,7,8,9};
intresult[N]={-1,-1,-1,-1,-1};

intcount=list(numbers,0,result,0);

printf("共有%d個 ",count);

system("pause");
return0;
}

運行結果:

『陸』 數獨 演算法 C語言 代碼

一、步驟:
1.對每一個空格,根據規則推斷它可能填入的數字,並存儲它的所有可能值;
2.根據可能值的個數,確定填寫的順序。比如說,有些空格只有一種可能,那必然是正確的結果,首先填入。
3.將所有隻有一種可能的空格填寫完畢以後,回到步驟1,重新確定剩下空格的可能值;
4.當沒有隻有一種可能的空格時(即每個空格都有兩種以上可能),按照可能值個數從小到大的順序,使用深度(廣度)優先搜索,完成剩下空格。

二、常式:

#include<windows.h>
#include<stdio.h>
#include<time.h>

charsd[81];
boolisok=false;

//顯示數獨
voidshow()
{
if(isok)puts("求解完成");
elseputs("初始化完成");

for(inti=0;i<81;i++)
{
putchar(sd[i]+'0');
if((i+1)%9==0)putchar(' ');
}
putchar(' ');
}

//讀取數獨
boolInit()
{
FILE*fp=fopen("in.txt","rb");
if(fp==NULL)returnfalse;
fread(sd,81,1,fp);
fclose(fp);
for(inti=0;i<81;i++)
{
if(sd[i]>='1'&&sd[i]<='9')sd[i]-='0';
elsesd[i]=0;
}
show();
returntrue;
}

//遞歸解決數獨
voidforce(intk)
{
if(isok)return;
if(!sd[k])
{
for(intm=1;m<=9;m++)
{
boolmm=true;
for(intn=0;n<9;n++)
{
if((m==sd[k/27*27+(k%9/3)*3+n+n/3*6])||(m==sd[9*n+k%9])||(m==sd[k/9*9+n]))
{
mm=false;
break;
}
}
if(mm)
{
sd[k]=m;
if(k==80)
{
isok=true;
show();
return;
}
force(k+1);
}
}
sd[k]=0;
}
else
{
if(k==80)
{
isok=true;
show();
return;
}
force(k+1);
}
}

intmain()
{
system("CLS");
if(Init())
{
doublestart=clock();
force(0);
printf("耗時%.0fms",clock()-start);
}
elseputs("初始化錯誤");
getchar();
}
熱點內容
阿里雲伺服器託管合同 發布:2024-11-29 07:46:37 瀏覽:296
linux用戶許可權設置 發布:2024-11-29 07:43:39 瀏覽:270
c語言if函數嵌套 發布:2024-11-29 07:43:35 瀏覽:757
學編程L2 發布:2024-11-29 07:39:58 瀏覽:429
微信如何設置收與付密碼 發布:2024-11-29 07:39:15 瀏覽:541
mysql備份與恢復腳本 發布:2024-11-29 07:39:13 瀏覽:50
在c語言的基本單位是 發布:2024-11-29 07:38:36 瀏覽:792
c語言演算法結構 發布:2024-11-29 07:23:08 瀏覽:222
空氣壓縮呼吸 發布:2024-11-29 07:23:00 瀏覽:56
百望雲伺服器設備編號必填 發布:2024-11-29 07:13:50 瀏覽:33