Chinaunix首页 | 论坛 | 博客
  • 博客访问: 37380
  • 博文数量: 7
  • 博客积分: 171
  • 博客等级: 入伍新兵
  • 技术积分: 85
  • 用 户 组: 普通用户
  • 注册时间: 2011-08-04 22:13
文章分类

全部博文(7)

文章存档

2012年(3)

2011年(4)

我的朋友

分类: C/C++

2012-02-21 22:32:00


题目: zyf最喜欢的数字是1!所以他经常会使用一些手段,把一些非1的数字变 成1,并为此得意不已。他会且仅会的两种手段是:  
1.把某个数m除以某个质数p——当然p必须能整除这个数,即m=m/p  
2.把某个数m减1,即m=m-1  
有一天他突发奇想,想把[a,b]区间中所有的数一个一个地变成1,这是一个巨大的无聊的工程,所以他想知道他最少得花多少操作才能达到目 的。


代码:显示WA
  1. #include <stdio.h>
  2. #include <math.h>
  3. #include <stdlib.h>

  4. int prime(int);

  5. int main(void)
  6. {
  7.     int t1,k,num,c,b,i;
  8.     int pri[100002];
  9.     pri[0]=pri[1]=0;
  10.     for (i=2;i<=100000;i++)
  11.         {
  12.             if(prime(i)) pri[i]=1;
  13.             else
  14.             {
  15.                 pri[i]=pri[i-1]+1;
  16.                 for(k=2;k<i;k++)
  17.                 {
  18.                     if((pri[k]==1)&&(i%k==0))
  19.                     {
  20.                         t1=pri[i/k]+1;
  21.                         if(t1<=pri[i]) pri[i]=t1;
  22.                         break;
  23.                     }
  24.                 }
  25.             }
  26.         }
  27.     while(scanf("%d %d",&c,&b)==2)
  28.         {
  29.             num=0;
  30.              for(i=c;i<=b;i++) num=num+pri[i];    
  31.             printf("%d\n",num);
  32.         }
  33.     return 0;
  34. }

  35. int prime(int num3)
  36. {
  37.     int i;
  38.     if(num3==2) return 1;
  39.     if(num3%2==0) return 0;
  40.     for(i=3;i<=sqrt((double)num3);i+=2)    {if(num3%i==0) return 0;}
  41.     return 1;
  42. }
阅读(1359) | 评论(0) | 转发(0) |
0

上一篇:。。。

下一篇:没有了

给主人留下些什么吧!~~