当前位置: 首页 > article >正文

蓝桥杯每日一真题—— [蓝桥杯 2021 省 AB2] 完全平方数(数论,质因数分解)

文章目录

  • [蓝桥杯 2021 省 AB2] 完全平方数
    • 题目描述
    • 输入格式
    • 输出格式
    • 样例 #1
      • 样例输入 #1
      • 样例输出 #1
    • 样例 #2
      • 样例输入 #2
      • 样例输出 #2
    • 提示
      • 思路:
        • 理论补充:完全平方数的一个性质:完全平方数的质因子的指数一定为偶数
        • 最终思路:
        • 小插曲:
      • 全部代码

[蓝桥杯 2021 省 AB2] 完全平方数

题目描述

一个整数 a a a 是一个完全平方数,是指它是某一个整数的平方,即存在一个 整数 b b b,使得 a = b 2 a=b^{2} a=b2

给定一个正整数 n n n,请找到最小的正整数 x x x,使得它们的乘积是一个完全平方数。

输入格式

输入一行包含一个正整数 n n n

输出格式

输出找到的最小的正整数 x x x

样例 #1

样例输入 #1

12

样例输出 #1

3

样例 #2

样例输入 #2

15

样例输出 #2

15

提示

对于 30 % 30 \% 30% 的评测用例, 1 ≤ n ≤ 1000 1 \leq n \leq 1000 1n1000,答案不超过 1000 1000 1000

对于 60 % 60 \% 60% 的评测用例, 1 ≤ n ≤ 1 0 8 1 \leq n \leq 10^{8} 1n108,答案不超过 1 0 8 10^{8} 108

对于所有评测用例, 1 ≤ n ≤ 1 0 12 1 \leq n \leq 10^{12} 1n1012,答案不超过 1 0 12 10^{12} 1012

蓝桥杯 2021 第二轮省赛 A 组 G 题(B 组 H 题)。

思路:

这一看直接暴力就只能得一点点分,我还数论学的不太好先暴力得了30分。然后开始想办法吧!
没办法。。。看答案吧。。。

理论补充:完全平方数的一个性质:完全平方数的质因子的指数一定为偶数

1.唯一分解定理任意一个数 n,它都可以分解为若干个质数的乘积。

2.需要知道完全平方数的一个性质:完全平方数的质因子的指数一定为偶数。附上大佬的证明过
程:
在这里插入图片描述

最终思路:

对n进行质因数分解,如果质因数的指数为奇数的话就在x中乘以这个质因子这样,可以让指数保持偶数,如果是偶数那就不用管它~~~~
1.分解质因子:

for (long long i = 2; i * i <= n; i++)
    {
        if (n % i == 0)
        {
            cnt++;//记录有多少个因子,后面好遍历
        }

        while (n % i == 0)
        {
            a[cnt] = i;//a数组存因子
            g[cnt]++;//g数组存因子指数
            n = n / i;
        }
    }

    if (n > 1)
    {
        a[++cnt] = n;
        g[cnt]++;
    }//考虑没分解完的情况

2,根据性质得出答案:

  for (int i = 1; i <= cnt; i++)//遍历如果有奇数就让原来的n*ans*这个奇数质因子也就是让ans*这个奇数质因子
    {
        if (g[i] % 2)
        {
            ans = ans * a[i];
        }
    }
    cout << ans;

小插曲:

质因数分解写错了最后输出了和n一样的数竟然得了60分!!

全部代码

#include <iostream>
using namespace std;

long long n, ans = 1, g[1000], a[1000], cnt;
int main()
{
    cin >> n;
    // 首先对n进行质因数分解
    for (long long i = 2; i * i <= n; i++)
    {
        if (n % i == 0)
        {
            cnt++;//记录有多少个因子,后面好遍历
        }

        while (n % i == 0)
        {
            a[cnt] = i;//a数组存因子
            g[cnt]++;//g数组存因子指数
            n = n / i;
        }
    }

    if (n > 1)
    {
        a[++cnt] = n;
        g[cnt]++;
    }//考虑没分解完的情况
    //完全平方数的质因子的指数一定为偶数
    for (int i = 1; i <= cnt; i++)//遍历如果有奇数就让原来的n*ans*这个奇数质因子也就是让ans*这个奇数质因子
    {
        if (g[i] % 2)
        {
            ans = ans * a[i];
        }
    }
    cout << ans;
    system("pause");
    return 0;
}


http://www.kler.cn/a/2495.html

相关文章:

  • Kivy,跨平台UI的艺术家
  • 鸿蒙UI(ArkUI-方舟UI框架)
  • OpenAI 故障复盘 - 阿里云容器服务与可观测产品如何保障大规模 K8s 集群稳定性
  • 【CSS】设置滚动条样式
  • 《解锁计算机视觉智慧:编程实现图片场景文字描述的开源宝藏》
  • CTF知识点总结(二)
  • IHome主页 - 让你的浏览器主页与众不同
  • 大数据现在找工作难么
  • 数据结构-排序
  • hexo主题标签的使用
  • 2023年天津市逆向re2.exe解析-比较难(超详细)
  • 软考--网络攻击分类
  • Tlsr8258开发-小问题汇总
  • 2023前端面试题(经典面试题)
  • ccc-pytorch-宝可梦自定义数据集实战-加载数据部分(9)
  • 智慧物业类管理APP开发功能有哪些?
  • Lesson 9.1 集成学习的三大关键领域、Bagging 方法的基本思想和 RandomForestRegressor 的实现
  • Spring入门篇3 --- 依赖注入(DI)方式、集合注入
  • 网络技术与应用概论(上)——“计算机网络”
  • 第29次CCFCSP认证经验总结
  • C语言 结构体进阶 结构体、枚举、联合详解(2)
  • AWS白皮书总结
  • 计算机网络管理 TCP三次握手的建立过程,Wireshark抓包分析并验证TCP三次握手建立连接的报文
  • I2C模块理解
  • Linux系统下gdb调试
  • 【Go】K8s 管理系统项目[Jenkins Pipeline K8s环境–应用部署]