NYOJ 517 最小公倍数 (大数+求最小公倍数思想)

考虑到1-100的最小公倍数肯定超出__int64.所以需要转化成字符串问题来解

仔细观察会发现,【1-n】的最小公倍数,是【1-n-1】的最小公倍数乘以n的所有素因子中没有被【1-n-1】包含的素因子。

例如:【1-7】的最小公倍数是2*3*2*5*7,8=2*2*2,(8中2出现3次,【1-7】的素因子中只出现2次)那么【1-8】就是2*3*2*5*7*2

 

 1 //我的代码: 
 2  #include<stdio.h>
 3  #include<string.h>
 4  #define N 50
 5  int len,a[N]={1};
 6  char tab[100][45]={0,1};
 7  inline int gcd(int a,int b)
 8  {
 9      return b==0?a:gcd(b,a%b);
10  }
11  int mod(int t) //求余
12  {
13      int i,k;
14      for(k=0,i=len-1;i>=0;--i){
15          k=(k*10+a[i])%t;
16      }
17      return k;
18  }
19  void fun(int m,int n)  //乘以m再除以n
20  {
21      int i,j,k,c;
22      int s[N];
23      for(c=i=0;i<len+2;++i){
24          k=a[i]*m+c;
25          a[i]=k%10;
26          c=k/10;
27      }
28      for(i=len+1;i>=0&&!a[i];--i);
29      len=i+1;
30      for(k=j=0,i=len-1;i>=0;--i){
31          k=k*10+a[i];
32          s[j++]=k/n;
33          k%=n;
34      }
35      len=j;
36      memset(a,0,sizeof(a));
37      for(i=0;i<len;++i)
38          a[i]=s[len-i-1];
39      for(i=len;!a[i];--i);
40      len=i+1;
41  }
42  int main()
43  {
44      int i,j,k,t,n;
45      for(len=1,i=2;i<=100;++i){//打表
46          t=mod(i);
47          if(t){
48              k=gcd(i,t);
49              fun(i,k);
50          }
51          for(tab[i-1][0]=j=len-1;j>=0;--j)
52              tab[i-1][j+1]=a[j];
53      }
54      while(~scanf("%d",&n)){
55          for(j=tab[n-1][0]+1;j>0;--j)
56              printf("%d",tab[n-1][j]);
57          printf("\n");
58      }
59      return 0;
60  }
 1 //优秀代码: 
 2  #include <stdio.h>
 3  int a,i,j,l;
 4  void prime(int pri[])
 5  {
 6      for(i=2;i<=100;i++)
 7          if(!pri[i])
 8              for(j=i+i;j<=100;j+=i)
 9                  pri[j]=1;
10  }
11  void bingo(int ans[][45],int pri[])
12  {
13      for(a=3;a<=100;a++)  //打表
14      {
15          ans[a][0]=1;
16          for(i=2;i<=a;i++)
17          {
18              if(!pri[i])
19              {
20                  j=i;
21                  while(j<=a)
22                  {
23                      j*=i;
24                      int temp=0;
25                      for(l=0;l<50;l++)
26                      {
27                          int p=ans[a][l]*i+temp;
28                          ans[a][l]=p%10;
29                          temp=p/10;
30                      }
31                  }
32              }
33          }
34      }
35  }
36  int main()
37  {
38      int pri[100]={1,1,0},ans[101][45]={0};
39      prime(pri);
40      bingo(ans,pri);
41      while(scanf("%d",&a)!=EOF)
42      {
43          if(a==1||a==2)
44              printf("%d\n",a);
45          else
46          {
47              for(i=44;i>=0;i--)
48                  if(ans[a][i]) break;
49              for(j=i;j>=0;j--)
50                  printf("%d",ans[a][j]);
51              printf("\n");
52          }
53      }
54      return 0;
55  }

话不多说,这道题的测试数据有点弱了,我的方法是简单的最小公倍数求值,而上面的优秀代码是利用1~n中素数因子幂最大的拿出来相乘,不过总的说过来我感觉还是我的比较省时!!

 

 

转载于:https://www.cnblogs.com/mycapple/archive/2012/08/10/2633017.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
图像识别技术在病虫害检测中的应用是一个快速发展的领域,它结合了计算机视觉和机器学习算法来自动识别和分类植物上的病虫害。以下是这一技术的一些关键步骤和组成部分: 1. **数据收集**:首先需要收集大量的植物图像数据,这些数据包括健康植物的图像以及受不同病虫害影响的植物图像。 2. **图像预处理**:对收集到的图像进行处理,以提高后续分析的准确性。这可能包括调整亮度、对比度、去噪、裁剪、缩放等。 3. **特征提取**:从图像中提取有助于识别病虫害的特征。这些特征可能包括颜色、纹理、形状、边缘等。 4. **模型训练**:使用机器学习算法(如支持向量机、随机森林、卷积神经网络等)来训练模型。训练过程中,算法会学习如何根据提取的特征来识别不同的病虫害。 5. **模型验证和测试**:在独立的测试集上验证模型的性能,以确保其准确性和泛化能力。 6. **部署和应用**:将训练好的模型部署到实际的病虫害检测系统中,可以是移动应用、网页服务或集成到智能农业设备中。 7. **实时监测**:在实际应用中,系统可以实时接收植物图像,并快速给出病虫害的检测结果。 8. **持续学习**:随着时间的推移,系统可以不断学习新的病虫害样本,以提高其识别能力。 9. **用户界面**:为了方便用户使用,通常会有一个用户友好的界面,显示检测结果,并提供进一步的指导或建议。 这项技术的优势在于它可以快速、准确地识别出病虫害,甚至在早期阶段就能发现问题,从而及时采取措施。此外,它还可以减少对化学农药的依赖,支持可持续农业发展。随着技术的不断进步,图像识别在病虫害检测中的应用将越来越广泛。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值