当前位置:   article > 正文

Day 7 输出m到n之间的素数_【问题描述】下面的程序输出m到n之间的所有素数。 【输入形式】两个正整数m n

【问题描述】下面的程序输出m到n之间的所有素数。 【输入形式】两个正整数m n

// 素数问题。输入两个正整数m和n(1<=m<=n<=500)
//输出m和n之间的全部素数,每行输出10个。 

  1. //使用嵌套循环解决该问题
  2. #include<stdio.h>
  3. #include<math.h>
  4. int main(void)
  5. {
  6. int n,m,i,k;
  7. int flag;
  8. int limit; //flag用来判断时是否为素数
  9. int count = 0;
  10. printf("Enter m and n:");
  11. scanf("%d%d",&m,&n);
  12. if(m<1||n>500||m>n){
  13. printf("Invalid!\n");
  14. }else{
  15. for(k=m;k<=n;k++){
  16. if(k<=1){
  17. flag=0;
  18. }else if(k==2){
  19. flag=1;
  20. } else{
  21. flag=1; //先假设k是素数
  22. limit=sqrt(k)+1;
  23. for (i=2;i<=limit;i++){
  24. if(k%i==0){ //若k能被某个i整除,则k不是素数
  25. flag=0; //置flag为0
  26. break;
  27. }
  28. }
  29. }
  30. if(flag==1){
  31. printf("%6d",k);
  32. count++;
  33. if(count%10==0){
  34. printf("\n");
  35. }
  36. }
  37. }
  38. }
  39. return 0;
  40. }

测试用例:Enter m and n:1 50
     2     3     5     7    11    13    17    19    23    29
    31    37    41    43    47

这个问题与判断素数问题相反,判断素数是判断数m在[2,\sqrt{}m]之间能否被整除。而此题则是先假设其是素数,引用flag进行判断,置flag为1,若k能被[2,\sqrt{}limit]中的某个数整除,则说明k不是素数,将flag改为0;这样,在内层循环结束后,flag的值表示k是否为素数。

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号