您的位置:首页 > 其它

数论小知识

2012-11-15 15:19 155 查看
判断一个数是否为奇数
#include<iostream>
using namespace std;
int main()
{
if(3&1)cout<<"yes1"<<endl;
if(4&1)cout<<"yes2"<<endl;
return 0;
}


求两个数的最大公约数

int gcd(int a,int b)
{
if(b==0) return a;
return gcd(b,a%b);
}


求m个数的最小公倍数

#include<iostream>
using namespace std;
int gcd(int a,int b) { if(b==0) return a; return gcd(b,a%b); }
int main()
{
int m,t,p=1;
cin>>m;
while(m--)
{
cin>>t;
p=p/gcd(p,t)*t;//两个数的最小公倍数=两数的乘积/两数的最大公约数
//此处若写成(p*t)/gcd(p,t)其中p*t的值可能会溢出
}
cout<<p<<endl;
}


求一个数的因子个数

//以100以内的数为例,求每个数的因子个数
#include<cstdio>
#include<cstring>
using namespace std;
const int M=101;
int main()
{
int i,t,num[M];
memset(num,0,sizeof(num));//起始时置零
for(i=1;i<M;i++)
{
num[i]++;//每个数是其本身的因子
t=i+i;//t表示i的倍数
while(t<M)
{
num[t]++;//若i的倍数为t则i必为t的因子
t+=i;
}
}
for(i=1;i<M;i++)
printf("%d ",num[i]);
return 0;
}


矩阵乘法

typedef struct Node
{
int m[11][11];
}Matrix;

Matrix Mul( Matrix a, Matrix b )  //矩阵乘法
{
Matrix c;
for( int i=0; i<n; ++ i )
{
for( int j=0; j<n; ++ j )
{
c.m[i][j]=0;  //特别注意
for( int k=0; k<n; ++ k )
{
c.m[i][j] += a.m[i][k]*b.m[k][j];
}

}
}
return c;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: