正在加载图片...
for(i=2;i<=sqrt(n)Hi++)/*在循环中发现有因子,表明不是素数,返回0*/ return o: return1;/*若循环结束仍未执行到 return,则顺序执行此句,返回1,表明没找到因 子,n是素数*/ void Goldbach( int even)/*验证even满足哥德巴赫猜想将EvEN分解为m和n,并 输出*/ /两变量分别用于在储分解的两数 for(m=2m<=even/2;m++)/*对第一个数的可能性进行穷举*/ i n=even- m /*根据第一个数得到第二个数* if( prime(m)&&prme(n))/*若两数均为素数,表示找到一组分解,输出并返回*/ i printf(%/od=%/od+%od, even, m n); retur } 解法二(用指针) #include<stdio h #include <math. h> int prime(intn);/*函数声明*/ void Goldbach( int even int*aint*b)/*函数声明*/ void maino i int i; for(i=4;i<=10000;i+=2)/*循环验证4-1000之间的每一个正偶数*/ Goldbach(i&m,&n)/*函数调用:对i进行分解,并将mn的地址传递给 形参,则函数中可以通过形参对mn进行间接引用,分解结果直接写入mn* printf("%/od=%od+/od\n"i, m, n); if(i9%050==0) /*因为结果较多,中间停顿一次,目的是将结果分两次输出, 用户按回车键后继续后半部分结果的输出*/ i puts("press l'enteri to continue"); getcharfor(i=2;i<=sqrt(n);i++) /*在循环中发现有因子,表明不是素数,返回 0*/ { if(n%i==0) return 0; } return 1;/*若循环结束仍未执行到 return0,则顺序执行此句,返回 1,表明没找到因 子,n 是素数*/ } void Goldbach(int even) /*验证 even 满足哥德巴赫猜想:将 EVEN 分解为 m 和 n,并 输出*/ { int m,n;/*两变量分别用于存储分解的两数*/ for(m=2; m<=even/2; m++) /*对第一个数的可能性进行穷举*/ { n=even-m; /*根据第一个数得到第二个数*/ if(prime(m)&&prime(n)) /*若两数均为素数,表示找到一组分解,输出并返回*/ { printf(“%d=%d+%d”, even,m,n); return; } } } 解法二 (用指针)#include<stdio.h> #include<math.h> int prime(int n); /*函数声明*/ void Goldbach(int even,int *a,int *b); /*函数声明*/ void main() { int i; int m,n; for(i=4;i<=10000;i+=2) /*循环验证 4-1000 之间的每一个正偶数*/ { Goldbach(i,&m,&n); /*函数调用:对 i 进行分解,并将 m,n 的地址传递给 形参,则函数中可以通过形参对 m,n 进行间接引用,分解结果直接写入 m,n*/ printf("%d=%d+%d\n",i,m,n); if(i%50==0) /*因为结果较多,中间停顿一次,目的是将结果分两次输出, 用户按回车键后继续后半部分结果的输出*/ { puts("press \'enter\' to continue"); getchar();
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有