求大神,c语言,输出区间上的素数个数,我想知道我哪里不对

求大神,c语言,输出区间上的素数个数,我想知道我哪里不对
//数论_输出区间上的素数个数
//统计任意区间[m,n]上素数的个数。
//m,n均为大于1的自然数,m<n,从键盘输入
#include<stdio.h>
int main()
{
int m,n;
scanf("%d%d",&m,&n);
int counter=0;

int i,a,j;
for(i=m;i<=n;i++)
{
for(j=2;j<=i-1;j++)

{
if(i%j==0)
{
break;
}
if(i%j!=0)
{
counter++;
}
}
}
printf("%d\n",counter);
return 0;
}

if(i%j!=0)
{
counter++;
}
这句有问题,举个例子:判断77是不是素数,77%2!=0 就加了一次,77%3!=0又继续加。。。。,所以这样计数有问题。
温馨提示:内容为网友见解,仅供参考
第1个回答  2016-05-18

参考代码:

#include<stdio.h>
int main()
{
 int m,n,i,a,j;
 scanf("%d%d",&m,&n);
 int counter=0; 
 for(i=m;i<=n;i++)
 {
  if(i==1) {
  counter++;
  continue;
  }
  for(j=2;j<=i-1;j++)
     if(i%j==0)
      break;
   if(i==j)
    counter++; 
 } 
 printf("%d\n",counter);
 return 0;
}

本回答被网友采纳
第2个回答  2016-05-18
if(i%j==0)
{
break;
}

这个删除掉

C语言输出100-200的所有素数。大家帮我看看哪儿错了。
如果没有if不成立,i++也没有执行。所以i一直是2,输出的一直是100~200之间的2的倍数,也就是偶数。这是我自己写的,用的是for语句,你喜欢while,也可以自己改成while的格式。include <stdio.h>int main(){int i,j;for(i=100;i<200;i++)for(j=2;j<=i;j++){ if(j\/i==1) ...

C语言编程 输出m到n之间的素数 要求定义函数 请帮助我找出错误_百度知 ...
include <stdio.h>#include <math.h>int prime (int n){int t,i,J=(n > 1) ? 1 : 0;t=(int)sqrt(n);for(i=2;i<=t;i++){if(n%i==0){J=0;break;}}return J;}int main(){int m,n,i,a;int flag=0;scanf("%d%d",&m,&n);for(i=m;i<=n;i++){a=prime(i)...

用C语言,输出是素数的所有3位整数。请问错在了哪里
include<stdio.h>int main(){int x,i;for(x=100;x<1000;x++){for(i=2;i<x;i++)if(x%i!=0);elsebreak;if ( i>=x )\/\/少了判断条件!只有找不到因数时,才是素数printf("%d ",x);}}

C语言 for循环求1到100的所有素数并输出,我下面程序错在哪里?_百度知 ...
不是77到100,是1到100。1到76的数据,你鼠标滚动下就能看到。原来的代码 if (i==j) printf ("i = %d\\n", i); 每次循环都必然被打印 \/* 可以如下改动 *\/#include <stdio.h>int main (void){int i;int j;int cnt = 0; \/* 计算器,监控能被多少个数整除 *\/for (i=1; i<101...

用c语言如何判断素数的个数
1、首先需要打开vs软件工程,准备好一个空白的C语言文件,引入头文件,主函数中暂时没有内容:2、这里开始编写代码,这里判断素数需要用到平方根,所以要在头文件中引入math库,然后编写判断素数的函数,函数有唯一的参数n,代表素数。判断的依据是素数n只要不能被 2 到根号下n之 间任一整数整除,则n...

c语言:输出100~200之间的全部素数,我的程序为什么不行啊?貌似是外层的...
内部for循环只需要判断有一个能被n整除就跳出去

求100~200的全部素数,C语言,大家看我哪里错了?
{ int a,b,d=0,leap=1;printf("\\n");for(a=101;a<=200;a++){ leap=1; \/* 加上这句 *\/ for( b=2;b<=a;b++)if(a%b==0){ leap=0;break;} if(leap){ printf("%-4d",a);d++;if(d%10==0)printf("\\n");} leap=1; \/* 这句可以去掉 *\/ } printf...

【C语言】输出0-200内的所有素数,并统计素数个数,采用函数判断是否是...
<stdio.h>int Isprime(int n){int i;if(n==0||n==1) return 0;else for(i=2;i<=n\/2;i++)if(n%i==0) return 0;return 1;}int main(){int i,n=0;for(i=0;i<=200;i++)if(Isprime(i)){printf("%-4d",i);n++;if(n%10==0)printf("\\n");}printf("\\n共%d个...

C语言输出100-200的素数个数,还有全部素数。
int main(){ int i,j,n=0;for(i=100;i<=200;i++){ int num=(int)sqrt(i); \/\/定义一个num减少sqrt的运行次数,提高效率 for(j=2;j<=num;j++)if(i%j==0)break;if(j>num){ printf("%d ",i);n=n+1; \/\/素数个数加1个 } } printf("\\n%d\\n",n); \/\/输出素数个...

请问C语言求m到n之间素数的个数这么写哪错了
首先……你的逻辑没有问题,但是吧……使用了break后会初始for语句里的值……所以你这个循环后,b和i的值永远不相等……还有两个小错误,if里应该是判断而不是赋值,要用==。printf的变量不需要加&。我用你的逻辑改了一下,你看看。int main(){ int a,b=0,i,c=0,m,n;scanf("%d %d", ...

相似回答