zoukankan      html  css  js  c++  java
  • 欧拉计划之题目5:找出最小的能被120中每个数整除的数。

    本题来自:http://pe.spiritzhang.com/index.php/2011-05-11-09-44-54/6-51-20

     1 #include <stdio.h>
     2 
     3 void zhengshu(int n)
     4 {
     5     int i,j,flag=1;
     6     for(i=n*(n-1);;i+=n)
     7     {
     8         for(j=(n/2)+1;j<=n;j++)
     9             if(i%j!=0)
    10             {
    11                 flag=0;
    12                 break;
    13             }
    14             else
    15                     flag=1;
    16         if(flag==1)
    17             break;
    18     }
    19     printf("%d\n",i);
    20 }
    21 
    22 void main()
    23 {
    24     zhengshu(10);       //找出1-10整除的数
    25     zhengshu(20);       //找出1-20整除的数
    26 }

    解析:
    分析1-10整除:能被10整除的,肯定同时能被1、2、5整除;能被9整除的,肯定能被1、3整除;能被8整除的,肯定被2、4;能被6整除,肯定被2、3整除······

    能同时被6、7、8、9、10整除的,肯定能被1、2、3、4、5整除。

    分析1-20整除:同上的方法,能同时被11、12、···、19、20整除的,肯定能被1至10整除。

    所以是(n/2)+1开始查找整除的。

    for(i=n*(n-1);;i+=n),同时能被整除,最大的数也能整除,这里减少循环次数。只是满足了最大的两个数能被最小的一个数整除,那最小的这个。

    感悟:

    原本是写的i++来循环递增的,但是发现1-20整除,电脑反应不过来,计算速度慢。所以才用的这个算法。如果你们有更好的算法,希望能说下,谢谢。

    更好的方法:

    1-20的素数表:2,3,5,7,11,13,17,19
    叠乘:2*2*2*2=16,剔除2取得8
    3*3=9,到达临街条件,取得3
    最终叠乘:2*3*5*7*11*13*17*19*3*8=232792560

  • 相关阅读:
    tomcat 7服务器跨域问题解决
    logstash 改变行分割符
    logstash 编码转换默认UTF8
    GIT常用命令
    GIT常用命令
    GIT常用命令
    介绍开发流程以及相关技术
    介绍开发流程以及相关技术
    介绍开发流程以及相关技术
    介绍开发流程以及相关技术
  • 原文地址:https://www.cnblogs.com/orange1438/p/2913754.html
Copyright © 2011-2022 走看看