鱼C论坛

 找回密码
 立即注册
查看: 2618|回复: 2

题目124:求有序根函数的第k个元素

[复制链接]
发表于 2016-8-23 16:38:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
Ordered radicals

The radical of n, rad(n), is the product of the distinct prime factors of n. For example, 504 = 23 × 32 × 7, so rad(504) = 2 × 3 × 7 = 42.

If we calculate rad(n) for 1 ≤ n ≤ 10, then sort them on rad(n), and sorting on n if the radical values are equal, we get:

QQ20160823-1@2x.png


Let E(k) be the kth element in the sorted n column; for example, E(4) = 8 and E(6) = 9.

If rad(n) is sorted for 1 ≤ n ≤ 100000, find E(10000).


题目:

n 的根函数,rad(n),定义为其所有不同质因子之积。例如,504 = 23 × 32 × 7,所以 rad(504) = 2 × 3 × 7 = 42。

如果我们对 1 ≤ n ≤ 10 计算 rad(n),然后先根据 rad(n) 的值排序,如果 rad 值相同再根据 n 排序,我们得到:

QQ20160823-2@2x.png


令 E(k) 为排序之后的第 k 个 n 值,例如, E(4) = 8, E(6) = 9。

如果将 1 ≤ n ≤ 100000 的 rad(n) 按照上述方法排序,求 E(10000)。


小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-11-29 22:27:32 | 显示全部楼层
解答:
  1. #coding:utf-8
  2. plist = []
  3. primes = [True] * 100000
  4. primes[0], primes[1] = False, False
  5. for i, prime in enumerate(primes):
  6.     if prime:
  7.         for j in range(i * i, 100000, i):
  8.             primes[j] = False
  9. for i, prime in enumerate(primes):
  10.     if prime:
  11.         plist.append(i)
  12. def rad(n):
  13.     rlist = []
  14.     for p in plist:
  15.         if n % p == 0:
  16.             rlist.append(p)
  17.             n //= p
  18.         if n < p:
  19.             break
  20.     s = 1
  21.     for e in rlist:
  22.         s *= e
  23.     return s

  24. order = [(1,1)]
  25. for i in range(2,100001):
  26.     order.append((rad(i),i))
  27. order.sort()
  28. print (order[9999])
复制代码

输出:
21417
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-21 13:08:47 | 显示全部楼层
  1. //21417
  2. #include <iostream>
  3. #include <cstring>
  4. #include <cmath>
  5. #include <algorithm>
  6. using namespace std;

  7. struct stNode
  8. {
  9.   int idx;
  10.   int r;
  11.   bool operator<(const stNode &n) const
  12.   {
  13.     if (r != n.r)
  14.       return (r < n.r);
  15.     else
  16.       return (idx < n.idx);
  17.   }
  18. };

  19. stNode np[100001];
  20. char cp[100001];

  21. int main(void)
  22. {
  23.   memset(cp, 1, sizeof(cp));
  24.   for (int i = 1; i <= 100000; ++i)
  25.   {
  26.     np[i].idx = i;
  27.     np[i].r = 1;
  28.   }
  29.   cp[0] = 0;
  30.   cp[1] = 0;
  31.   for (int i = 2; i <= 317; ++i)
  32.   {
  33.     if (cp[i] == 0)
  34.       continue;
  35.     for (int j = i * i; j <= 100000; j += i)
  36.       cp[j] = 0;
  37.   }
  38.   for (int i = 2; i <= 100000; ++i)
  39.   {
  40.     if (cp[i] == 1)
  41.     {
  42.       for (int j = i; j <= 100000; j += i)
  43.         np[j].r *= i;
  44.     }
  45.   }
  46.   sort(np, np + 100001);
  47.   cout << np[10000].idx << endl;
  48.   return 0;
  49. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-22 01:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表