2014-03-20 02:29
题目:将质因数只有3, 5, 7的正整数从小到大排列,找出其中第K个。
解法:用三个iterator指向3, 5, 7,每次将对应位置的数分别乘以3, 5, 7,取三者中最小的数作为生成的下一个结果。可以一次性生成整个序列,因为这个序列一般不会很长,增长率是指数级的。
代码:
1 // 7.7 Find the kth number that has no prime factors other than 3, 5 or 7. 2 #include <algorithm> 3 #include <cstdio> 4 #include <vector> 5 using namespace std; 6 7 int main() 8 { 9 vector<int> v; 10 int n = 0; 11 int p3, p5, p7; 12 int res3, res5, res7; 13 int min_res; 14 const int MAX = 1000000000; 15 16 v.push_back(1); 17 p3 = p5 = p7 = 0; 18 while (true) { 19 res3 = v[p3] * 3; 20 res5 = v[p5] * 5; 21 res7 = v[p7] * 7; 22 min_res = min(res3, min(res5, res7)); 23 if (min_res > MAX) { 24 break; 25 } 26 if (res3 == min_res) { 27 ++p3; 28 } 29 if (res5 == min_res) { 30 ++p5; 31 } 32 if (res7 == min_res) { 33 ++p7; 34 } 35 v.push_back(min_res); 36 } 37 printf("count = %u\n", v.size()); 38 39 while (scanf("%d", &n) == 1) { 40 if (n < 0 || n >= (int)v.size()) { 41 printf("Out of range.\n"); 42 } else { 43 printf("%d\n", v[n]); 44 } 45 } 46 47 return 0; 48 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)