欧拉计划 NO05 ps:4题想过,好做,但麻烦,有时间补充,这题也不难!
问题重述:
2520 is the smallest number that can be divided by each of the numbers from 1 to 10 without any remainder.
What is the smallest positive number that is evenly divisible by all of the numbers from 1 to 20?
问题的意思是找出可以整除小于等于某个数的所有公倍数,给出的测试用例是可以整除小于等于10的最小公倍数是2520,求
出可以整除小于等于20的最小公倍数(只针对正整数)。
思想:
先想一下如果不考虑计算时间,最简单的办法就是找出一个范围,让这个范围的数挨个对1~20内的数整除,但是问题就是
这个范围到底怎么找,一个简单的想法就是,最后的答案肯定小于20!,大于小于20所有素数的乘积。
想到这里我突然想起前面几个关于素数的问题,可不可以借助前面的想法呢?答案肯定是可以的。
先考虑这样一个问题2,3的最小公倍数是6,就是3和2的乘积;6和8的最小公倍数却是24,不是6和8的乘积,这里的问题出
在6和8有公因子,而2和3却没有,那么根据这个想法可以处理这个问题,假设现在有个数接近他的最小倍数,如果这个数是合数
那么可能这个数乘以他的因子就可以整除了。代码如下:
my solution is written by c++, work for any range!
#include <iostream>
#include <string>
#include <vector>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
using namespace std; int least_common_multiple(int num)
{
int common = ;//初始化最小公倍数
for (int i = ; i <= num; i++)
{
if(common % i != )//如果不能整除则说明里面有common要乘的因子
{
int temp = i;
for (int j = ; j <= (int)sqrt(i); j++)//求素因子
{
if(temp % j == )
{
if((temp / j) == )
continue;
temp = temp / j;
j = ;//如果找到一个因子,重置j
}
}
cout <<i << " "<< temp << endl;//打印出它每次要乘的因子
common *= temp;//公倍数乘以素数部分
}
} return common;
} int main(int argc, const char *argv[])
{
int num = atoi(argv[]);
cout << "num: "<<num << " " << (int)sqrt()<< endl;
cout << least_common_multiple(num) << endl;
return ;
}
if you want to use my solution. please delete line number before complie
这次程序的速度还是相当快的
当num为10,common为2520
当num为30,common为2329089562800
注意当num为30时,最小公倍数已经超出int类型的范围,建议使用long long int。
欧拉计划 NO05 ps:4题想过,好做,但麻烦,有时间补充,这题也不难!的更多相关文章
- 用欧拉计划学Rust编程(第26题)
最近想学习Libra数字货币的MOVE语言,发现它是用Rust编写的,所以先补一下Rust的基础知识.学习了一段时间,发现Rust的学习曲线非常陡峭,不过仍有快速入门的办法. 学习任何一项技能最怕没有 ...
- 通过欧拉计划学习Rust编程(第22~25题)
最近想学习Libra数字货币的MOVE语言,发现它是用Rust编写的,所以先补一下Rust的基础知识.学习了一段时间,发现Rust的学习曲线非常陡峭,不过仍有快速入门的办法. 学习任何一项技能最怕没有 ...
- 用欧拉计划学Rust语言(第17~21题)
最近想学习Libra数字货币的MOVE语言,发现它是用Rust编写的,所以先补一下Rust的基础知识.学习了一段时间,发现Rust的学习曲线非常陡峭,不过仍有快速入门的办法. 学习任何一项技能最怕没有 ...
- 用欧拉计划学习Rust编程(第13~16题)
最近想学习Libra数字货币的MOVE语言,发现它是用Rust编写的,所以先补一下Rust的基础知识.学习了一段时间,发现Rust的学习曲线非常陡峭,不过仍有快速入门的办法. 学习任何一项技能最怕没有 ...
- 用欧拉计划学Rust语言(第7~12题)
最近想学习Libra数字货币的MOVE语言,发现它是用Rust编写的,所以先补一下Rust的基础知识.学习了一段时间,发现Rust的学习曲线非常陡峭,不过仍有快速入门的办法. 学习任何一项技能最怕没有 ...
- 通过欧拉计划学Rust(第1~6题)
最近想学习Libra数字货币的MOVE语言,发现它是用Rust编写的,看来想准确理解MOVE的机制,还需要对Rust有深刻的理解,所以开始了Rust的快速入门学习. 看了一下网上有关Rust的介绍,都 ...
- 通过欧拉计划学Rust编程(第54题)
由于研究Libra等数字货币编程技术的需要,学习了一段时间的Rust编程,一不小心刷题上瘾. 刷完欧拉计划中的63道基础题,能学会Rust编程吗? "欧拉计划"的网址: https ...
- 通过欧拉计划学Rust编程(第500题)
由于研究Libra等数字货币编程技术的需要,学习了一段时间的Rust编程,一不小心刷题上瘾. "欧拉计划"的网址: https://projecteuler.net 英文如果不过关 ...
- 刷完欧拉计划中难度系数为5%的所有63道题,我学会了Rust中的哪些知识点?
我为什么学Rust? 2019年6月18日,Facebook发布了数字货币Libra的技术白皮书,我也第一时间体验了一下它的智能合约编程语言MOVE,发现这个MOVE是用Rust编写的,看来想准确理解 ...
随机推荐
- shell查找文件并删除
-mtime 0 表示文件改动时间距离当前为0天的文件.即距离当前时间不到1天(24小时)以内的文件. -mtime 1 表示文件改动时间距离当前为1天的文件,即距离当前时间1天(24小时-48小时) ...
- 构建工具Gradle安装和简单使用
1. 安装 到gradle官网下载页 https://gradle.org/gradle-download/ 下载gradle,其中“完全版(Complete distribution)”包含除了运行 ...
- spring使用aop
基于spring-framework-4.1.7使用aop >>>>>>>>>>>>>>>>>&g ...
- Call to undefined function curl_init()解决方法
今天在使用php中的 curl 扩展时 在开启
- 1,php概述
学习了这么久的php,今天就跟着这本书,一章一章的去复习一下php的基础知识,个人理解如下:php是一门编写动态语言的web语言,能编写web语言的有好几种,但是人们都喜欢php,第一,php是开源的 ...
- java问题:类的定义,对象的定义?
java问题:类的定义,对象的定义? 类是一组数据和函数的集合,只是抽象的概念,它的作用就是生成对象,它生成对象后,就为这个对象分了一块存储区,类可以生成无限多个对象,每个对象都有自己的存储区,在类里 ...
- Android 读取txt文件并以utf-8格式转换成字符串
博客: 安卓之家 微博: 追风917 CSDN: 蒋朋的家 简书: 追风917 博客园: 追风917 # 使用EncodingUtils 今天用到了城市选择三级联动的库,用的这个:https://gi ...
- AngularJs的UI组件ui-Bootstrap-Tooltip
完整案例,参考http://www.cnblogs.com/pilixiami/p/5661600.html <!DOCTYPE html> <html ng-app="u ...
- jsp中<c:if>与<s:if>的区别
<c:if>时jstl标签,一般与el表达式一起使用,参考http://www.360doc.com/content/11/1121/16/7874148_166229306.shtml ...
- MySQL常见问题汇总(原创)
本文记录了使用Mysql时遇到的问题,持续更新中... 1.在windows命令行下登录mysql时报错: C:\Program Files\MySQL\MySQL Server 5.0\bin> ...