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

质数分解,用sqrt缩小范围

题目:scanf一个整数,int32范围内,分解为质数序列输出
例如:
12分解为2 2 3

技巧就一个:用sqrt缩小范围

因为uint32(4,294,967,295)(接近43亿个数)范围内有2亿个左右质数,所以,一般不会用缓存去优化。

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <math.h>

bool is_prime_optimized(int n) {
    if (n <= 1) {
        return false;
    }
    int i2 = sqrt(n);
    for (int i = 2; i <= i2; i++) {
        if (n % i == 0) {
            return false;
        }
    }
    return true;
}

int main() {
    int a;
    while (scanf("%d", &a) != EOF) {
        int b = sqrt(a);
        for (int i = 2; i <= b; i++) {
            if (is_prime_optimized(i)) {
                while (0 == a % i) {
                    printf("%d ", i);
                    a = a / i;
                }
            }
            if (1 == a)break;
        }
        if (a > 1) {
            printf("%d ", a);
        }
    }
    return 0;
}

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

相关文章:

  • springboot497基于java国产动漫网站设计和实现(论文+源码)_kaic
  • xinput1_3.dll放在哪里?当xinput1_3.dll丢失时的应对策略:详细解决方法汇总
  • mac_录屏
  • 01.HTTPS的实现原理-HTTPS的概念
  • 【Java 数据结构】面试题 02.02. 返回倒数第 k 个节点
  • 使用Docker部署一个Node.js项目
  • Ps:在 Photoshop 中编辑视频
  • 微信小程序中遇到过的问题
  • 【Laravel】接口的访问频率限制器
  • ViiTor实时翻译 2.2.1 | 完全免费的高识别率同声传译软件
  • 51c自动驾驶~合集43
  • mac_录屏
  • 【Java基础面试题026】Java中的String、StringBuffer和StringBuilder的区别是什么?
  • 如何在 Apache 中创建单个文件的别名 ?
  • Python经典面试21题
  • 贪心算法(三)
  • Maven-安装与环境配置
  • SQL进阶技巧:如何计算加油站问题? | LeetCode 134. 加油站
  • for媒体打破智能座舱体验同质化,斑马智行荣获“华舆奖”优秀创
  • Unity模型观察脚本
  • 使用Excel制作通达信自定义“序列数据“
  • cesium入门学习一
  • 江苏计算机专转本 技能Mysql知识点总结(一)
  • BiTCN-BiGRU基于双向时间卷积网络结合双向门控循环单元的数据多特征分类预测(多输入单输出)
  • 【Stable Diffusion】SD Stable Diffusion 最新版本 4.10 安装包
  • K8s 不同层次的进程间通信实现