首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

素数有关问题哪位高手能深入分析一上

2013-01-05 
素数问题谁能深入分析一下题目是输入一个数能够判断这个数是第几个素数。为什么下面的程序不能输出结果。谁

素数问题谁能深入分析一下
题目是输入一个数能够判断这个数是第几个素数。为什么下面的程序不能输出结果。谁能深入分析一下,谢啦。





#include<stdio.h>
main()
{
long i,m,q=1,n;//m 循环数,n所求的个数
printf("输入你想判断的求的个数\n");
scanf("%ld",&n);
for(m=3;;m++)
{
for(i=2;i<m;i++)
if(m%i!=0)
{
q++;
if(q==n)
break;
}
if(m%i==0)
continue;
}
printf("%ld",q);
}

[解决办法]
一看你的break只能跳出一层for循环, 而你有2层for循环。
[解决办法]
参考我的博文(http://blog.csdn.net/turingo/article/details/8161061)。
[解决办法]
#include<stdio.h>
int main()
{
    long i,m,q=1,n;//m 循环数,n所求的个数
    printf("输入你想判断的求的个数\n");
    scanf("%ld",&n);//首先需要判断是不是合法的自然数
    if(i < 2)
       return 0;
    q = 0;
  //我觉得应该先判断给的数是不是素数,如果给的数不是那就不用判断了
    for(i=2;i<=n;i++)
       if(!(n%i))
       {
           break;
       }
    if(n!=i)//居然是素数,自然只有自己可以取余为0
       return 0;

     for(m=2;m<=n;m++)
     {    
        for(i=2;i<=m;i++)
        if(!(m%i))
        {
            break;
        }
     if(m==i)
        q++;
    }
    printf("%ld",q);
    return 0;
}
我觉得你要的思路就是这样,但是这样数字大的时候运算量太大了,如果实际需要可以把这些数找出来放在数据库或者数组,树啊什么的放起,需要的时候检索就行。毕竟实际使用的数不能是无限大的。

热点排行