数论公式与代码储备,
最大公约数
int gcd(int x,int y)
{
int t ;
while(y > 0)
{
t = x % y;
x = y ;
y = t ;
}
return x;
}
求素数 math。h头文件
int is_prime(int u)
{
if(u==0||u==1) return false; //0 1不是素数
if(u==2)return true;//2是素书
if(u % 2 == 0) return false;//偶数都不是素数
for(int i = 3;i <= sqrt(u); i+=2)
if(u%i == 0) return false;//在3到根号u之间内整除的话
return true; //都没发生就是素数
}
向量的叉乘定理
南阳 题 68 判断三角形各点是否顺时针
利用矢量叉积判断是逆时针还是顺时针。设矢量P = ( x1, y1 ),Q = ( x2, y2 ),则矢量叉积定义为由(0,0)、p1、p2和p1+p2 所组成的平行四边形的带符号的面积,即:P × Q = x1*y2 - x2*y1,其结果是一个标量。显然有性质 P × Q = - ( Q × P ) 和 P × ( - Q ) = - ( P × Q )。
叉积的一个非常重要性质是可以通过它的符号判断两矢量相互之间的顺逆时针关系:
若 P × Q > 0 , 则P在Q的顺时针方向。
若 P × Q < 0 , 则P在Q的逆时针方向。
若 P × Q = 0 , 则P与Q共线,但可能同向也可能反向。
解释:
a×b=(ay * bz - by * az, az * bx - ax * bz, ax * by - ay * bx) 又因为az bz都为0,所以a×b=(0,0, ax * by - ay * bx)
根据右手系(叉乘满足右手系),若 P × Q > 0,ax * by - ay * bx>0,也就是大拇指指向朝上,所以P在Q的顺时针方向,一下同理。
#include <stdio.h>
int main()
{
int x1,x2,x3,y1,y2,y3;
while(scanf("%d%d%d%d%d%d",&x1,&y1,&x2,&y2,&x3,&y3),x1||x2||x3||y1||y2||y3)
printf((x2-x1)*(y3-y1)-(y2-y1)*(x3-x1)>0?"0\n":"1\n");
return 0;
}