『壹』 階乘的公式是什麼
n!=1×2×3×...×n。階乘亦可以遞歸方式定義:0!=1,n!=(n-1)!×n。
亦即n!=1×2×3×...×n。階乘亦可以遞歸方式定義:0!=1,n!=(n-1)!×n。
『貳』 求階乘的詳細演算法
不知道你要什麼的!!C的有了 我給你個VB的
Private Sub Form_Load()
Dim 開始 As Long
Dim 結束 As Long
開始 = 1
結束 = 10
Dim temp As Long
temp = 1
For i = 開始 To 結束
temp = temp * i
Next i
MsgBox temp
End Sub
『叄』 階乘的演算法
階乘的數字是幾,就是從1按自然數的順序乘到這個數
比如4的階乘就是1×2×3×4=24
『肆』 怎樣計算「階乘」
說實話,沒有計算階乘的公式,也沒有簡便方法,只是硬算,也可以運用計算機,可以計算到65!,如果你想計算跟大的數,我建議你上網路尋找計算階乘的軟體,聽說多大的數都能計算出來。
還有這個參考:
由於階乘運算的增長速度特別快(比2^n的增長速度快),對於較小整數的階乘運算採用簡單的遞規演算法可以實現,但是對於大整數的乘法(比如1000!),則傳統的遞規演算法就失去了作用。
由於本人的水平不高,用下列拙劣的方式實現,請高人多多指教。具體如下:定義一個很長的數組,用數組的每一項表示計算結果的每一位。例如,7!=5040,a[1000],則a[0]=0,a[1]=4,a[2]=0,a[3]=5。
程序源代碼:
/**
*計算大數的階乘,演算法的主要思想就是將計算結果的每一位用數組的一位來表示:如要計算5!,那麼首先將
*(1) a[0]=1,然後a[0]=a[0]*2,a[0]=2,
*(2) a[0]=a[0]*3,a[0]=6
*(3) a[0]=a[0]*4,a[0]=24,此時a[1]=2,a[0]=4
*/
public class Factorial
{
static int a[] = new int [10000];
static void factorial(int n)
{
for(int i=2; i< a.length; i++)
a[i] = 0; //將數組元素初始化
a[0] = 1; //用數組的一項存放計算結果的位數
a[1] = 1; //將第一項賦值為一
for(int j= 2; j <= n; j++)
{
int i=1;
int c = 0; //c表示向高位的進位
for(; i <= a[0]; i++)
{
a[i] = a[i] * j + c;//將來自低位的計算結果和本位的結果相加
c = a[i] / 10;
a[i] = a[i] % 10;
}
for(; c != 0; i++)
{
a[i] = c%10;
c = c / 10;
}
a[0] = i - 1;
}
}
public static void main(String[] args)
{
String num = args[0];
int count = 0;
int n = Integer.parseInt(num);
f(n);
for(int i= a[0]; i>0; i--)
{
count++;
System.out.print(/*"a[" + i + "]=" + */a[i]/* + " "*/);
}
System.out.println("\n"+count);
}
}
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=528778
參考資料:http://blog.csdn.net/hengshan/archive/2005/11/13/528778.aspx
『伍』 階乘的程序和演算法
#include<stdio.h>
main()
{
int i,n, t=1;
printf("Input n:");
scanf("%d",&n);
if(n<0) pintf("Error!");
else if(n==0) printf("0!=1");
else
{for(i=1;i<=n;i++)<br/><br/> t*=i;<br/><br/> printf("n!=%ld",t);<br/><br/> }
}
以上是求階乘的方法
下面是篩法
編制用篩法求1-n(n≤200)以內素數的程序。
分析:由希臘著名數學家埃拉托色尼提出的所謂「篩法」,步驟如下:
①將所有候選數放入篩中;
②找篩中最小數(必為素數)next,放入集合primes中;
③將next的所有倍數從篩中篩去;
④重復②~④直到篩空。
編程時,用集合變數sieve表示篩子,用集合primes存放所有素數。
main(){
int i,j,h,k=0,p[100]={0},a[200]={0};
for(i=1;i<200;i++)a[i]=i+1;/*將所有候選數放入篩中*/
for(i=0;i<200;i++)
for(j=0;j<200;j++)
if(a[i]!=0){
p[k]=a[i];/*將最小數放入素數集合p中*/
for(h=k;h<200;h++)
if(a[h]%p[k]==0)a[h]=0;/*將這個素數的倍數從篩中刪去*/
k++;}
i=0;
printf("primes:");
while(p[i]!=0){printf("%5d",p[i]);i++;}/*列印出所有素數*/
}
將這兩個程序組合修改一下就OK了
『陸』 求階乘的公式
公式:n!=n*(n-1)!
階乘的計算方法
階乘指從1乘以2乘以3乘以4一直乘到所要求的數。
例如所要求的數是4,則階乘式是1×2×3×4,得到的積是24,24就是4的階乘。
例如所要求的數是6,則階乘式是1×2×3×..×6,得到的積是720,720就是6的階乘。例如所要求的數是n,則階乘式是1×2×3×…×n,設得到的積是x,x就是n的階乘。
階乘的表示方法
在表達階乘時,就使用「!」來表示。如x的階乘,就表示為x!
他的原理就是反推,如,舉例,求10的階乘=10*9的階乘(以後用!表示階乘)那麼9!=?,9!=9*8!,8!=8*7!,7!=7*6!,6!=6*5!,5!=5*4!,4!=4*3!,
3!=3*2!,2!=2*1!,1的階乘是多少呢?是1
1!=1*1,數學家規定,0!=1,所以0!=1!然後在往前推算,公式為n!(n!為當前數所求的階乘)=n(當前數)*(n-1)!(比他少一的一個數n-1的階乘把公式列出來像後推,只有1的!為1,所以要從1開始,要知道3!要知道2!就要知道1!但必須從1!開始推算所以要像後推,如果遍程序演算法可以此公式用一個函數解決,並且嵌套調用次函數,,)把數帶入公式為,
1!=1*1
2!=2*1(1!)
3!=3*2(2!)
4=4*6(3!),如果要是編程,怎麼解決公式問題呢
首先定義演算法
//演算法,1,定義函數,求階乘,定義函數fun,參數值n,(#include
long
fun(int
n
)
//long
為長整型,因20!就很大了超過了兆億
(數學家定義數學家定義,0!=1,所以0!=1!,0與1的階乘沒有實際意義)
2,函數體判斷,如果這個數大於1,則執行if(n>1)(往回退算,這個數是10求它!,要從2的階乘值開始,所以執行公式的次數定義為9,特別需要注意的是此處,當前第一次寫入代碼執行,已經算一次)
求這個數的n階乘(公式為,n!=n*(n-1)!,並且反回一個值,
return
(n*(fun(n-1));(這個公式為,首先這個公式求的是10的階乘,但是求10的階乘就需要,9的階乘,9的階乘我們不知道,所以就把10減1,也就是n-1做為一個新的階乘,從新調用fun函數,求它的階乘然後在把這個值返回到
fun(n-1),然後執行n*它返回的值,其實這個公式就是調用fun函數的結果,函數值為return
返回的值,(n-1)為參數依次類推,...一值嵌套調用fun函數,
到把n-1的值=1,
注意:此時已經運行9次fun()函數算第一次運行,,調用幾次fun函數呢?8次函數,所以,n-1執行了9次,n-1=1
,n=2已經調用就可以求2乘階值
『柒』 階乘是怎麼演算法
階乘的標志是:「!」。
自然數!=自然數×(自然數-1)×……×1。
負數!=∞(不能在計算器上顯示)。
『捌』 階乘演算法
36的階乘是這樣子表示的
36!=1*2*3*……*34*35*36
你用上面那個除以35 那麼35是不是就是約掉啦? 那麼就變成
1*2*3*……*31*32*33*34*36
把36單獨寫出來 左邊1到34還是齊全的對不對?那麼它就是34的階乘
所以答案是36(34!)(*可省略)
『玖』 階乘計算公式
階乘的主要公式:
(9)階乘運算功能關鍵演算法擴展閱讀:
階乘(factorial)是基斯頓·卡曼(Christian Kramp, 1760 – 1826)於1808年發明的運算符號。階乘,也是數學里的一種術語。階乘指從1乘以2乘以3乘以4一直乘到所要求的數。
另外,數學家定義,0!=1,所以0!=1!通常我們所說的階乘是定義在自然數范圍里的,小數沒有階乘,像0.5!,0.65!,0.777!都是錯誤的。
但是,有時候我們會將Gamma函數定義為非整數的階乘,因為當x是正整數n的時候,Gamma函數的值是n-1的階乘。