最近在复习,看到有的代码写得真的很妙,分享给大家。
1.函数递归求最大公因数
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int gcd(int, int);
int main()
{
int m, n;
scanf("%d%d", &m, &n);
printf("%d", gcd(m, n));
return 0;
}
int gcd(int m, int n)
{
int c = m % n;
if (c == 0)
return n;
return gcd(n, c);
}
这种算法用到了简单的函数递归,不仅简洁而且无需考虑输入的两个数的大小关系。
2.验证哥德巴赫猜想之一:2000以内大于等于4的所有偶数都可以表示为两个质数之和。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
int judgeprime(int);
int main()
{
int n, i, j, count = 0;
for (n = 4; n <= 2000; n+=2)
{
for (i = 2; i < n; i++)
{
if (judgeprime(i) < 0)
continue;
else
{
for (j = i; j < n; j++)
{
if (judgeprime(j) < 0)
continue;
else
{
if (i + j == n)
{
printf("%4d=%d+%3d ", n, i, j);
count++;
if (count % 4 == 0)
printf("\n");
break;
}
}
}
break;
}
}
}
return 0;
}
int judgeprime(int k)
{
int sign = -1, n, i;
n = (int)sqrt(k);
for (i = 2; i < k; i++)
if (k % i == 0)
break;
if (i >= k)
sign = 1;
return sign;
}
自定义函数判断质数,再循环验证是否符合条件。