gcd
#include<stdio.h> int gcd(int a,int b) { if(b==0){ return a; } else{ return gcd(b,a%b); } } int main() { int a,b,c,n; scanf("%d%d%d",&a,&b,&c); n=gcd(a,b); n=gcd(n,c); printf("%d",n); return 0; }
int gcd(int a, int b) { while (b != 0) { int temp = b; b = a % b; a = temp; } return a; } int gcd3(int a, int b, int c) { return gcd(gcd(a, b), c); } int main() { int m, n, o; scanf("%d%d%d", &m, &n, &o); printf("%d\n", gcd3(m, n, o)); return 0; }
#include<stdio.h> int main() { int a,b,c,min,i; scanf("%d %d %d",&a,&b,&c); if(a<=b&&a<=c){ min=a; }else if(b<=a&&b<=c){ min=b; }else{ min=c; } for(i=min;i>=1;i--){ if(a%i==0&&b%i==0&&c%i==0){ printf("%d",i); break; } } return 0; }//将就看看吧
暴力算法(问就是懒得想其他算法):
#include <stdio.h> int main() { int n,a,b,c; scanf("%d%d%d",&a,&b,&c); for(int i=1;;i++){ if(a%i==0&&b%i==0&&c%i==0) n=i; if(i==a||i==b||i==c) break; } printf("%d",n); return 0; }
辗转相除法
int main() { int a,b,c; int i,m; scanf("%d %d %d",&a,&b,&c); while(i=a%b){ a=b; b=i; } while(m=b%c){ b=c; c=m; } printf("%d",c); return 0; }
递归法: #include<stdio.h> int main(){ int b,i,j,n,m; scanf("%d %d %d",&i,&j,&n); while(i%j!=0) { b=i%j; i=j; j=b; } while(j%n!=0) { m=j%n; j=n; n=m; } printf("%d\n",n); return 0; }
#include <stdio.h> int main() { int a,b,c,min; scanf("%d %d %d",&a,&b,&c); min=a; if (min>b){ min=b; }if (min>c){ min=c; } int gcd; for (int i=1;i<=min;i++){ if (a%i0&&b%i0&&c%i==0){ gcd=i; } } printf("%d",gcd); return 0; }
注册一个 南阳理工学院OJ 通用账户,您就可以在我们提供的所有在线评测服务上提交代码、参与讨论。
使用您的 南阳理工学院OJ 通用账户