java实现第二届蓝桥杯最小公倍数(c++)
最小公倍数、
为什么1小时有60分钟,而不是100分钟呢?这是历史上的习惯导致。
但也并非纯粹的偶然:60是个优秀的数字,它的因子比较多。
事实上,它是1至6的每个数字的倍数。即1,2,3,4,5,6都是可以除尽60。
我们希望寻找到能除尽1至n的的每个数字的最小整数。
不要小看这个数字,它可能十分大,比如n=100, 则该数为:
69720375229712477164533808935312303556800
请编写程序,实现对用户输入的 n (n<100)求出1~n的最小公倍数。
例如:
用户输入:
6
程序输出:
60
用户输入:
10
程序输出:
2520
要求考生把所有函数写在一个文件中。调试好后,存入与考生文件夹下对应题号的“解答.txt”中即可。
相关的工程文件不要拷入。
对于编程题目,要求选手给出的解答完全符合ANSI C标准,不能使用c++特性;
不能使用诸如绘图、中断调用等硬件相关或操作系统相关的API。
Java解法:
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
public void getResult(int n) {
BigInteger temp1 = BigInteger.ONE;
BigInteger temp2 = BigInteger.ONE;
BigInteger temp3 = BigInteger.ONE;
for(int i = 2;i <= n;i++) {
temp1 = temp3;
temp2 = new BigInteger(""+i);
temp3 = temp1.gcd(temp2);
temp3 = temp1.multiply(temp2).divide(temp3);
}
System.out.println(temp3);
}
public static void main(String[] args) {
Main test = new Main();
Scanner in = new Scanner(System.in);
int n = in.nextInt();
test.getResult(n);
}
}
C++解法:
解答:
最小公倍数就是所有质数的相应幂的积
比如N=10
小于10的质数有2,3,5,7
对应的最大幂是:3,2,1,1
则最小公倍数是:2^3x3^2x5^1x7^1 = 2520
#include <iostream>
#include <cstring>
#include <cmath>
using namespace std;
int a[50] = {0};//存素数
bool vis[100];
int b[50] = {0};//存幂次
void init_prim()//求小于100的所有素数存入数组a
{
int i,j,k;
int m = (int)(sqrt(100.0)+0.5);
memset(vis,0,sizeof(vis));
vis[0] = 1;
vis[1] = 1;//必须加上,否则第一个素数别认为是1
for(i=2; i<=m; i++)
if(!vis[i])
{
for(j=2*i; j<=100; j+=i)
vis[j] = 1;
}
int t = 0;
for(k=0; k<100; k++)
if(!vis[k])
a[t++] = k;
}
int main()
{
int i,j,k;
init_prim();
int n;
//2^6 = 64,2^7 = 128;由于n最大100,幂次最大6
// for(i=0 ; i<100; i++)//素数没问题
// if(!vis[i])
// cout<<i<<endl;
// while(1);
while(cin>>n)
{
memset(b,0,sizeof(b));
for(i=0; i<=n&&a[i]<=n; i++)//”1到n素数个数小于n的一半 “不对,3有两个素数
{
// cout<<a[i]<<"-----"<<endl;
for(j=1; j<=6; j++)
{
if(pow((double)a[i],(double)j)>(double)n)
{
b[i] = j -1;//b的下标不必新开
break;
}
else if(pow((double)a[i],(double)j) == (double)n)//必须分开
{
b[i] = j;
break;
}
}
}
//不知道是不是pow函数的问题,把ans定义为int得出的结果出问题,double就对了
double ans = 1;
for(k=0; k<i; k++)
{
//cout<<a[k]<<"........"<<b[k]<<endl;
ans *= pow((double)a[k],(double)b[k]);
}
cout<<(int)ans<<endl;
}
return 0;
}
//该程序 到25时就溢出,ans换位long long前几个就错误啦,此时需要把pow函数换掉
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std;
const int N = 105;
int n;
int a[N][50];
int b[N] = {0};
void multiply()
{
int i,j,k;
memset(a,0,sizeof(a));
for(i=3; i<=100; i++)
{
/*
下面的是直接按平常的乘法,乘数的一位乘以被乘数的每一位并处理进位;另外是乘数整体乘以被乘数的每一位最后统一处理进位
*/
int temp = 0;
a[i][0] = 1;//很重要
for(j=2; j<=i; j++)
{
int c = 0;
for(k=0; k<50; k++)//最大不超过160位 ,目前是100!,最后除以3等50
{
temp = a[i][k]*b[j] + c;
a[i][k] = temp%1000;
c = temp/1000;
}
}
}
}
void printData(int n)
{
int i,j,k;
for(i=49; i>=0; i--)
if(a[n][i])
break;
cout<<a[n][i];//第一个不输出前导0
for(j=i-1; j>=0; j--)
printf("%03d",a[n][j]);
cout<<endl;
}
int main()
{
int i, j, k;
for(i=0; i<N; i++)
b[i] = i;
for(i=2; i<N; i++)
for(j=i+1; j<=N; j++)
{
if(b[j]%b[i]==0)
b[j] /= b[i];
//cout<<b[j]<<endl;
}
//for(i=0; i<100; i++)
// cout<<b[i]<<endl;
//while(1);
multiply();
while(cin>>n)
{
if(n==1||n==2)
{
cout<<n<<endl;
continue;
}
printData(n);
}
return 0;
}
java实现第二届蓝桥杯最小公倍数(c++)的更多相关文章
- java实现第二届蓝桥杯地铁换乘(C++)
地铁换乘. 为解决交通难题,某城市修建了若干条交错的地铁线路,线路名及其所属站名如stations.txt所示. 线1 苹果园 .... 四惠东 线2 西直门 车公庄 .... 建国门 线4 .... ...
- java实现第二届蓝桥杯连通问题(C++)
连通问题. BMP是常见的图像存储格式. 如果用来存黑白图像(颜色深度=1),则其信息比较容易读取. 与之相关的数据: (以下偏移均是从文件头开始) 偏移:10字节, 长度4字节: 图像数据真正开始的 ...
- java实现第二届蓝桥杯异或加密法
异或加密法. 在对文本进行简单加密的时候,可以选择用一个n位的二进制数,对原文进行异或运算. 解密的方法就是再执行一次同样的操作. 加密过程中n位二进制数会循环使用.并且其长度也可能不是8的整数倍. ...
- java实现第二届蓝桥杯四方定理
四方定理. 数论中有著名的四方定理:所有自然数至多只要用四个数的平方和就可以表示. 我们可以通过计算机验证其在有限范围的正确性. 对于大数,简单的循环嵌套是不适宜的.下面的代码给出了一种分解方案. 请 ...
- Java实现第九届蓝桥杯全球变暖
全球变暖 题目描述 你有一张某海域NxN像素的照片,"."表示海洋."#"表示陆地,如下所示: ....... .##.... .##.... ....##. ...
- 算法笔记_199:第二届蓝桥杯软件类决赛真题(C语言本科)
前言:以下代码部分仅供参考,C语言解答部分全部来自网友,Java语言部分部分参考自网友,对于答案的正确性不能完全保证. 试题1 数论中有著名的四方定理:所有自然数至多只要用四个数的平方和就可以表示. ...
- Java实现第九届蓝桥杯小朋友崇拜圈
小朋友崇拜圈 题目描述 班里N个小朋友,每个人都有自己最崇拜的一个小朋友(也可以是自己). 在一个游戏中,需要小朋友坐一个圈, 每个小朋友都有自己最崇拜的小朋友在他的右手边. 求满足条件的圈最大多少人 ...
- 第二届蓝桥杯C++B组国(决)赛真题
以下代码仅供参考,解答部分来自网友,对于正确性不能保证,如有错误欢迎评论 四方定理. 数论中有著名的四方定理:所有自然数至多只要用四个数的平方和就可以表示. 我们可以通过计算机验证其在有限范围的正确性 ...
- Java实现第九届蓝桥杯倍数问题
倍数问题 题目描述 [题目描述] 众所周知,小葱同学擅长计算,尤其擅长计算一个数是否是另外一个数的倍数.但小葱只擅长两个数的情况,当有很多个数之后就会比较苦恼.现在小葱给了你 n 个数,希望你从这 n ...
随机推荐
- struts2 自定义tag标签
在项目中可能有很多相同的jsp页面表示功能,这时可以使用自定义的tag进行定义,渐少重复的工作量便于日后维护! 下面就基于struts2进行自定义标签的定义与实现: 首先:自定义类MyTag继承str ...
- 2018-06-18 Javascript 基础1
js是一门基于对象的若类型语言,他和JAVA没有关系: js标签放置位置:1.内联 2.外部 3.内部: js代码是有执行顺序的,这点和css代码有所区别:当对象没有加载完或者还没加载的情况下js代码 ...
- 用一个python文件去调用另一个python文件,关于相对路径的处理?
比如用a.py调用执行b.py,但是a.py和b.py路径环境不一样,而b.py中有使用相对路径读取文件,这时会报错,怎么在a.py中进行配置,使其调用b.py时路径和其相同,能否做到? 比如目录结构 ...
- Excel 数据导入至Sqlserver 数据库中 ltrim() 、rtrim() 、replace() 函数 依次空格无效问题
今天导一些数据从Excel中至Sqlserver 数据库中,在做数据合并去重的时候发现,有两条数据一模一样,竟然没有进行合并: 最后发现有一条后面有个“空格”,正是因为这个“空格”让我抓狂许久,因为它 ...
- Java开发架构篇:DDD模型领域层决策规则树服务设计
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 在上一章节介绍了领域驱动设计的基本概念以及按照领域驱动设计的思想进行代码分层,但是仅 ...
- Django之url反向解析
在urls.py文件中,在进行url映射时,为请求的url命个名,以便在模板页面或者views.py视图中可以进行反向解析,同时在修改了url映射的请求路径,名称不变的情况下,不再修改模板页面或者视图 ...
- 用C++验证三门问题
三门问题(换门): #include <iostream> #include <cstdlib> #include <ctime> #define random(a ...
- mysql小白系列_04 datablock
1.为什么创建一个InnoDB表只分配了96K而不是1M? 2.解析第2行记录格式?(用下面的表定义和数据做测试) mysql> create table gyj_t3 (),name2 var ...
- module.exports = $; $ is not defined
https://blog.csdn.net/weixin_43945983/article/details/88294052 解决方案:安装依赖包 1.执行安装jquery依赖包命令 cnpm ins ...
- 安装superset遇到的坑
实验环境:ubuntu16.04 python环境: 3.6.7 安装参考:https://superset.incubator.apache.org/installation.html 特别提醒: ...