搜索
查看: 1360|回复: 4
打印 上一主题 下一主题

挑战5(用的啊哈C知识解答的)

[复制链接]
跳转到指定楼层
楼主
发表于 2014-8-19 10:48:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
看了论坛中的挑战5题解.实在是看的一知半解.一直琢磨用书中学到的知识解题.一直都不能完美的解答.!困扰了很久.下面是不完美的解法.各位看看能否有什么办法直接可以将2这个数在算法中放进去.? 我是直接算了质数的.不然的话最后输出的答案就是1473了.

#include <stdio.h>
#include <stdlib.h>
int main()
{
        int a,b,i,sum;
    sum=1;                        //事先将质数2的数放进去
        for(a=3;a<=12345;a++)        //所以此处循环从3开始
        {
                i=0;         //i的值为判断这个数是否为质数
                b=2;
                while (b<a)
                {
                        i=a%b;        //当a的值除以b的值的余数为0的时候
                        if (i==0) //已经判断值不为质数
                                break;//跳出循环
                        b++;
                }
                if (i!=0)
                {
                        sum++;
                }
        }
                        printf("%d\n",sum);   
        system("pause");
        return 0;
}


沙发
发表于 2014-8-19 13:39:40 | 只看该作者
没看懂你的描述
板凳
发表于 2014-8-19 15:21:49 | 只看该作者
本帖最后由 981013 于 2014-8-19 15:23 编辑

[mw_shl_code=c,true]#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
bool isPrime(unsigned long long a)
{
   if(a==2) return true;      //事先判断好a是素数
   if (a%2==0) return false;  //对2进行试除
   int j;
   for (j=3; j*j<=a; j+=2)//对3~sqrt(a)进行试除,用j+=2而非j++是为了优化效率
   {
      if (a%j==0)
         return  false;
   }
   return true;
}
int main()
{
   int sum=0;
   int i;
   for (i=2; i<=12345; ++i)
   {
      if (isPrime(i))
         ++sum;
   }
   printf("sum=%d\n",sum);
   system("pause");
   return 0;
}[/mw_shl_code]
地板
 楼主| 发表于 2014-8-19 16:56:17 | 只看该作者

额.主要是解题的思路对么.?
5#
发表于 2014-8-21 22:30:42 | 只看该作者
你直接输出sum+1不就好了
  1. printf("%d\n",sum+1);   
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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