#include<stdio.h>
#define N 100
long int jie(int n)/*阶乘*/
{
long int j;
if(n==1)
return 1;
j=jie(n-1)*n;
return j;
}
int zuhe(int m,int n)/*组合数*/
{
int a;
a=jie(m)/(jie(m-n)*jie(n));
return a;
}
int getmax(int m,int n)/*最大公约数*/
{
int i,j=0;
int max;
int a[N];
for(i=1;i<=m;i++)
{
if(m%i==0)
{
if(n%i==0)
{
a[j]=i;
j++;
}
}
}
max=a[0];
for(i=0;i<j;i++)
{
if(max<a[i])
max=a[i];
}
return max;
}
int getmin(int m,int n)/*最小公倍数*/
{
int min;
int max;
max=getmax(m,n);
min=m*n/max;
return min;
}
void sushu(int m)/*素数*/
{
int i,flag=0;
for(i=2;i<m;i++)
{
if(m%i==0)
{
flag=1;
break;
}
}
if(flag==0)
printf("此数为素数!\n");
else
printf("此数不是素数!\n");
}
main()
{
int m,n;
char ch;
while(1)
{
printf("1键求任意数的阶乘\n2键求组合数\n3键求任意两个整数的最大公约数和最小公倍数\n4键判断任意数是否是素数\n");
ch=getch();
switch(ch)
{
case '1':{
printf("输入数字:");
scanf("%d",&m);
printf("阶乘为%d",jie(m));
}
break;
case '2':{
printf("输入两数字:");
scanf("%d%d",&m,&n);
printf("组合数为:%d",zuhe(m,n));
}
break;
case '3':{
printf("输入两整数:");
scanf("%d%d",&m,&n);
printf("最大公约数为:%d\n最小公倍数为:%d\n",getmax(m,n),getmin(m,n));
}
break;
case '4':{
printf("输入任意数:");
scanf("%d",&m);
sushu(m);
}
break;
}
printf("继续?Y/N");
ch=getch();
if(ch=='y')
system("CLS");
else
{
system("CLS");
break;
}
}
}