早教吧 育儿知识 作业答案 考试题库 百科 知识分享

编程(孪生素数)输入一个正整数repeat(repeat大于0且小于10),做repeat次下列运算:输入2个正整数m和n,输出m到n间的各对孪生素数i和j(m小于等于i小于j小于等于n)。如果两个素数之差为2,

题目详情
编程(孪生素数)
输入一个正整数repeat (repeat大于0且小于10),做repeat次下列运算:
输入2个正整数m 和n,输出m到n间的各对孪生素数i和j(m小于等于i小于j小于等于n)。如果两个素数之差为2, 称它们是一对孪生素数(素数: 除了1和此数本身之外, 不能被其它整数整除的自然数, 1不是素数, 2是素数)。函数prime(k)判断k是否为素数,每对孪生素数的第1个数i存入数组a。
▼优质解答
答案和解析
楼主的两个for循环用的不对,另外整个流程也是有问题的。改正的代码如下:
#include #include int main(){ int a,b; /* 输入的两个数据范围 */ int i,j,k; int num=0, s; /* 素数个数, 素数标志 */ scanf( "%d %d", &a,&b ); for( i=a;i+2<=b;i++ ) { s = 1; /* 先假设i是素数 */ k = sqrt(i); for( j=2;j<=k;j++ ) { if( i%j == 0 ) { s = 0; /* i不是素数 */ break; } } if( s ) { k = sqrt( i+2 ); for( j=2;j<=k;j++ ) { if( (i+2)%j == 0 ) { s = 0; /* i+2不是素数 */ break; } } if( s ) { ++num; /* i+2是素数 */ printf( "第%d个孪生素数[%d,%d]\n", num, i, i+2 ); } } } return 0;}
二、用GCC编译测试结果: