素数:
按照素数的定义,可以用2~number-1的所有证书去除number,只要有能整除的,便说明number不是素数。不过对任意值的number检验它是否为素数时,不必使用比其平方根大的数取整除它。
#include <stdio.h>
#include <math.h>
int IsPrimeNumber(int number);
void main()
{
int a;
printf("Input a integer number: ");
scanf("%d",&a);
if (IsPrimeNumber(a))
{
printf("%d is prime number.\n",a);
}
else
printf("%d isn't prime number.\n",a);
}
int IsPrimeNumber(int number)
{
int i;
if(number<=1) return 0;
for(i=2;i<sqrt(number);i++)
{
if(number%i==0) return 0;
return 1;
}
}
最大公约数与最小公倍数:欧几里德算法(辗转相除法),计算原理依赖如下定理:
gcd(a,b)=gcd(b,a mod b)
code:
#include <stdio.h>
void swap(int*a,int*b);
int MaxCommonFactor(int a,int b);//最大公约数
int MinCommonMultiple(int a,int b);//最小公倍数
void main()
{
int x,y,z,p;
scanf("%d,%d",&x,&y);
z=MaxCommonFactor(x,y);
p=MinCommonMultiple(x,y);
printf("%d,%d\n",z,p);
}
void swap(int*a,int*b)
{
int temp;
temp=*a;
a=b;
*b=temp;
}
int MaxCommonFactor(int a,int b)
{
int temp;
if (b>a)
{
swap(&a,&b);
}
while(a%b!=0)
{
temp=b;
b=a%b;
a=temp;
}
return b;
}
int MinCommonMultiple(int a,int b)
{
return (a*b)/MaxCommonFactor(a,b);//最小公倍数=两数相乘/最大公约数
}
斐波那契数列:
其第一项和第二项的值都为1,以后各项的值为其前两项值之和。所以要计算第n项的值f(n),可以列出其递归式f(n)=f(n-1)+f(n-2),当n=1或2时,其值为1。
方法一:
#include <stdio.h>
void main()
{
int i;
int a[40];
a[0]=a[1]=1;
for (i=2;i<40;i++)
{
a[i]=a[i-1]+a[i-2];
}
for (i=0;i<40;i++)
{
printf("%d\t",a[i]);
}
}
方法二:(递归)注:效率不高
#include <stdio.h>
int f(int number);
void main()
{
int i,k;
for (i=1;i<=40;i++)
{
k=f(i);
printf("%d\t",k);
}
}
int f(int number)
{
if (number<=2)
{
return 1;
}
else return (f(number-1)+f(number-2));
}
素数:
#include"stdio.h"
void main()
{int n,i;
for(n=0;n<=500;n++)
{for(i=2;i<=n-1;i++)
if(n%i==0)break;
if(i>=n)printf("%d\t",n);}
}
最大公约数:
#include<stdio.h>
void main()
{int m,n,r;
printf(" 请输入两个数");
scanf("%d,%d",&m,&n);
while(1)
{r=m%n;
if(r==0)break;
else {m=n;
n=r;}}
printf("%d",n);
}
最小公倍数
#include<stdio.h>
void main()
{int m,n,r,t;
int static s;
printf(" 请输入两个数");
scanf("%d,%d",&m,&n);
s=m*n;
while(1)
{r=m%n;
if(r==0)break;
else {m=n;
n=r;}}
t=s/n;
printf("%d",t);
}