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 ...
随机推荐
- 什么是HTTP
什么是HTTP 什么是 HTTP ?你肯定立马跳出:"HTTP 是超文本传输协议,就是 HyperText Transfer Protocol". 这样回答还是过于简单,那到底什么 ...
- C#实现局域网聊天 通讯 Socket TCP 多人
程序分别为服务端与客户端,服务端创建套接字使用多线程侦听多客户端请求 代码需要引用System.Net:和System.Net.Socket:这两个类 分享源码demo:https://pan.bai ...
- 设计模式系列之适配器模式(Adapter Pattern)——不兼容结构的协调
模式概述 模式定义 模式结构图 模式伪代码 类适配器,双向适配器,缺省适配器 类适配器 双向适配器 缺省适配器 模式应用 模式在JDK中的应用 模式在开源项目中的应用 模式总结 主要优点 主要缺点 适 ...
- Linux基本命令(文件基操)
1. 查询目录内容:ls [选项] [文件或者目录] -a 显示所有文件,包括隐藏文件 -l 显示详细信息 -d 查看目录属性 -h 人性化显示文件大小 -i 显示节点ID,inode ls -ld ...
- OpenCV开发笔记(五十六):红胖子8分钟带你深入了解多种图形拟合逼近轮廓(图文并茂+浅显易懂+程序源码)
若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...
- ES6,ES7,ES8 常用特性总结
一. ES6(ES2015) 1. 变量 let 和常量 const var 的问题 可以重复声明,没有报错和警告 无法限制修改 没有块级作用域, { } let 和 const 不能重复声明 都是块 ...
- ⚠ | 不要再使用 markdown 主题了!
前置 我在很久之前就发现了使用第三方 markdown 主题将产生一个的问题,今日在社区发现依然有人写文章来推荐这种做法.接下来我告诉你为什么最好不要这样做以及分享一些 markdown 技巧.若有不 ...
- 5.5 Go defer
5.5 Go defer 程序开发中经常要创建资源(数据库初始化连接,文件句柄,锁等),在程序执行完毕都必须得释放资源,Go提供了defer(延时机制)更方便.更及时的释放资源. 1.内置关键字def ...
- JavaDoc文件如何生成
目录 如何使用 1.通过命令行生成JavaDoc文档 2.IDEA如何配置后生成javadoc文档 javadoc命令是用来生成自己的API文档的 参考信息: @author 作者名 @version ...
- BZOJ1066 网络流
拆点,将一个柱子拆成入点和出点,入点出点之间的容量就是柱子的容量 1066: [SCOI2007]蜥蜴 在一个r行c列的网格地图中有一些高度不同的石柱,一些石柱上站着一些蜥蜴,你的任务是让尽量多 ...