博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU1164 Eddy's research I(解法二)
阅读量:6581 次
发布时间:2019-06-24

本文共 1187 字,大约阅读时间需要 3 分钟。

问题链接

问题描述参见上文。

问题分析
这是一个整数因子分解问题。

前一个解法是使用计算欧拉函数的基本思想进行分解,即从小因子开始逐步分解。

这个解法则使用Eratosthenes筛选法计算必要的素数放在数组中备用。然后使用这些素数,从小因子开始逐步分解整数。由于素数事先被计算出来,只计算一次,可以重复使用,运行速度相对比较快。

程序说明(略)。

AC的程序如下:

#include 
#include
// Eratosthenes筛选法void sieveofe(int p[], int n){ int i, j; p[0] = 0; p[1] = 0; p[2] = 1; // 初始化 for(i=3; i<=n; i++) { p[i++] = 1; p[i] = 0; } int max = sqrt(n); for(i=3; i<=max; i++){ if(p[i]) { for(j=i+i; j < n; j+=i) //进行筛选 p[j]=0; } } // 整理数组p,将素数放在前面的单元中 p[0] = 2; j = 1; for(i=3; i<=n; i++) if(p[i]) p[j++] = i;}// 利用计算得到的素数(数组p中),进行分解(超时)void divide(int p[], int n){ int count = 0, i = 0; while(n > 1) { while(n % p[i] == 0) { n /= p[i]; if(++count == 1) printf("%d", p[i]); else printf("*%d", p[i]); } i++; } printf("\n");}#define MAXN 65535int p[MAXN+1];int main(void){ sieveofe(p, MAXN); int n; while(scanf("%d", &n) != EOF) { divide(p, n); } return 0;}

转载于:https://www.cnblogs.com/tigerisland/p/7564899.html

你可能感兴趣的文章
锋利的jQuery-2--判断jQuery获取到的对象是否存在$().length
查看>>
linux 查询系统版本命令、查询端口号是否被占用命令
查看>>
java笔记八:IO流之字符流与字符缓冲流
查看>>
Docker 命令收集
查看>>
myeclipse注册码生成器
查看>>
怎样快速学好PHP技术之PHP学习方法总结
查看>>
iOS App间相互跳转漫谈 part2
查看>>
Java CAS 原理剖析
查看>>
ISCC2014 writeup
查看>>
Kotlin 知识梳理(1) Kotlin 基础
查看>>
js正则表达式
查看>>
iOS socket通信,编解码,浮点型数据解析
查看>>
手把手教你如何新建scrapy爬虫框架的第一个项目(下)
查看>>
前端基础15:JS作用域基础
查看>>
Linux系统相关命令
查看>>
BATJ面试必会之 Spring 篇(一)
查看>>
表驱动法
查看>>
什么是企业内训
查看>>
firefox无法显示java插件plugin
查看>>
H3C设备之OSPF DR选举
查看>>