//质数问题及哥德巴巴赫的猜想
//首先我们要学会什么是质数以及如何判断一个质数
//什么是质数:除1外只能被自身整除的数叫做质数
//我们先来判断一个质数
//int main()
//{
// int number = 0;
// int i = 0;
// int count = 0;
//
// scanf("%d", &number);
// for (i = 2; i <= a - 1; i++)
// {
// if (a % i == 0)
// {
// count++;
// break;
// }
// }
// if (count == 0)
// {
// printf("是质数");
// }
// else
// {
// printf("不是质数");
// }
// return 0;
//}
//如果用for (i = 2; i <= number - 1; i++)这种去判断是否为质数
//计算机运算的过程是不是很多
//所以我们可以改进一下
//首先偶数除了2以外都可以被2整除,所以偶数都不是质数
//然后我们在一个数前一半去找它的因数
// 如果找不到,那也就不可能在它的后面找到这个因数对应的因数,也就一定是质数
// 如在7前一半找 1 2 3;都不是7的因数,那么在7的后面是不是也就找不到7的因数
// 我们再按这个逻辑走下去,进行延申。
//例如 2*4=8 3*3=9 3*4=12 2*6=12 3*5=15 10*10=100 50*2=100
//我们是不是可以发现总有一个数是小于等于这个数的根号的。
//于是for(i=2;i<=sqrt(number),i++)就可以减少计算量。
//
//欧克了,我们学会了判断质数,再来大boss《验证歌德巴赫猜想》之一
//先来说下(现代版本)歌德巴赫猜想之一是什么:任意大于2的偶数都可以写成两个质数的和
//但当时是以1为质数的原则,现在已经不遵循这个原则了,所以我们从4开始判断
//我们来验证4-100以内的偶数
//逻辑:我们可以取2个数,一个在2/k前取,一个在其后取,然后分别验证是否都为质数。
//逻辑成立 操作。
int main()
{
int Num = 0; int i = 0;
int num1 = 0; int num2 = 0;
int count1 = 0; int count2 = 0;
for (Num = 4; Num <= 100; Num=Num+2)
{
for (num1 = 2; num1 <=Num/2; num1++)
{
count1 = 0;
for (i = 2; i <= sqrt(num1);i++)
{
if (num1 % i == 0)
{
count1++;
break;
}
if (num1 ==2)
{
count1 = 0;
}
}
if (count1 == 0)
{
num2 = Num - num1;
count2 = 0;
for (i = 2; i <=sqrt(num2); i++)
{
if (num2 % i == 0)
{
count2++;
break;
}
if (num1 == 2)
{
count2 = 0;
}
}
if (count2 == 0)
{
printf("%d+%d=%d\n", num1, num2, Num);
break;
}
}
}
}
return 0;
}
ok解决
我们来梳理一下要点
1.首先我们得逻辑要先有个大概方向
2.我们得注意数据count1 count2的初始化,以及break的一些小细节。
此篇献给一些刚入门的学者,只用了循环与判断的知识,希望能帮助到你们