搜索
查看: 3943|回复: 11
打印 上一主题 下一主题

挑战 5 : 2~12345中有多少个质数?

[复制链接]
跳转到指定楼层
楼主
发表于 2013-5-8 07:35:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
5啊哈币

最佳答案

查看完整内容

楼主参考一下吧,一个可行的试除法的实现
沙发
发表于 2013-5-8 07:35:02 | 只看该作者
  1. #include <stdio.h>
  2. #include <math.h>

  3. int isPrime(int);

  4. int main(void)
  5. {
  6.         int i,counter;
  7.         counter = 0;
  8.         for(i=2; i<=12345; ++i)
  9.                 if(isPrime(i))
  10.                         ++counter;
  11.         printf("%d\n", counter);
  12.        
  13.         return 0;
  14. }

  15. int isPrime(int x)
  16. {
  17.         int upper = (int)sqrt(x);
  18.         int i;
  19.         if(x < 2)
  20.                 return 0;
  21.         else if(x == 2)
  22.                 return 1;
  23.         else{
  24.                 for(i = 2; i <= upper; ++i)
  25.                         if(x % i == 0)
  26.                                 return 0;
  27.         }
  28.        
  29.         return 1;
  30. }
复制代码
楼主参考一下吧,一个可行的试除法的实现
板凳
 楼主| 发表于 2013-5-8 16:53:53 | 只看该作者
#include <stdio.h>
#include <stdlib.h>
int main()
{
        int i;                                         //在一个大于1的自然数中,除了1和此整数自身外
    for (i=2;i<=100;i++)                //,不能被其他自然数整除的数  这个条件这么写??
    {                                                                        //      ? ? ?                                    
                if (i/1==i&&i/i==1)             //    ?       ?
        {                                                                //            ?
                                                                                //                          ?               
                                                                                //          ?                                       
                        printf("%d ",i);            //          ?
                                                                                //                        ?                       
        }
   
    }
        system("pause");
        return 0;
}
地板
发表于 2013-5-8 18:38:11 | 只看该作者
#include<stdio.h>
int f(int a)
{int m;
for(m=3;m<=a/2;m++)
if(a%m!=0)
return(1);
else
return(0);
}
main()
{
int n,i,;
for(i=2;i<=12345;i++)
if(i)
n+=1;
printf("%d",n);
}
应该是吧,我也是初学者^^
5#
发表于 2013-5-8 21:04:03 | 只看该作者
chuzhizuo 发表于 2013-5-8 16:53
#include
#include
int main()

不是
要保证i没有其他约数,而不是1和i是它的约数
6#
发表于 2013-5-8 21:06:06 | 只看该作者
lsama 发表于 2013-5-8 18:38
#include
int f(int a)
{int m;

1.不能从3开始试除
2.函数f只会被试验一次
3.n没有初始化,后面用n+=1是没有意义的
4.if(i)估计是if(f(i))写错了
7#
 楼主| 发表于 2013-5-8 22:45:34 | 只看该作者
rosynirvana 发表于 2013-5-8 21:14
楼主参考一下吧,一个可行的试除法的实现

太棒了。。。如果加上注释  就更好了。。。有点小贪心。。。爱死你、、、加油
8#
发表于 2013-5-8 23:34:05 | 只看该作者
chuzhizuo 发表于 2013-5-8 22:45
太棒了。。。如果加上注释  就更好了。。。有点小贪心。。。爱死你、、、加油

对于2-12345之间的每个数字,都用isPrime函数进行检验
isPrime函数是这么工作的:
如果接受到的数字比2小,返回0(0在判断的时候被视为假)
如果接受到的数字是2,那么返回1(在判断时为真)
否则,就计算需要试除的上界,这个上界是对数字求平方根然后取整
检验从2到upper之间的每个数字,如果能够整除,说明不是质数,直接返回0
如果2-upper之间都检验完成了,那么说明是一个质数,返回1
9#
 楼主| 发表于 2013-5-9 09:33:20 | 只看该作者
rosynirvana 发表于 2013-5-8 23:34
对于2-12345之间的每个数字,都用isPrime函数进行检验
isPrime函数是这么工作的:
如果接受到的数字比 ...

有不懂得  ,百度不到的。。就找你好不。。
10#
发表于 2013-5-9 13:41:32 | 只看该作者
chuzhizuo 发表于 2013-5-9 09:33
有不懂得  ,百度不到的。。就找你好不。。

可以的啊         
11#
发表于 2013-7-8 09:09:40 | 只看该作者
#include <stdio.h>
#include <stdlib.h>
int main()
{     int a,b,c=1;        
      for(a=2;a<=12345;a++){        
          for(b=2;b<a;b++){        
               if(a%b==0&&a!=b)        
               break;
               if(b==a-1)
               c++;
               }
       }
       printf("%d",c);

        system("pause");
        return 0;
}
这样应该好理解一点
12#
发表于 2015-10-4 11:37:10 | 只看该作者
Dsp 发表于 2013-7-8 09:09
#include
#include
int main()

我没看明白其间的函数关系
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表