最近需要求反向最大素数和正向最近素数,
1 计算机器的核心数目
2 拿到大于核心数目且最近的素数
3 拿到反向最大素数,两个算法

场景是,分配合适的线程,并且按照素数分配到合适的线程中去,比如根据URL如请求的是 /xn/live/234来计算hash值,并且将改链接session分配到一个线程中

计算有x个线程
链接为session,session1,session2 …,分配到x1,x2,x3…线程中

show me the code

#pragma once
#include <string.h>
#include <cmath>
#include <thread>
//注意prime是素数
static int rotating_hash(const char *key, int prime)
{int hash, i;int len = strlen(key);for (hash = len, i = 0; i < len; i++){hash = (hash << 4 >> 28) ^ key[i];return (hash % prime);}
}static int hash_add(const char* key, int prime)
{int hash, i;int len = strlen(key);for (hash = len, i = 0; i < len; i++)hash += key[i];return (hash % prime);
}//求核数后面最大的素数
//只能被自己和1整除的数为素数static int hash_next_prime(int num) {if (num == 1)return 2;if (num == 2)return 3;if (num % 2 == 0)++num;int i;bool flag = false;while (1){flag = false;for (i = 3; i<num; i += 2)if (num % i == 0) {flag = true;break;}if (!flag)return num;num += 2;}
}
//寻找反向最大的素数
static int find_min_s(int a) {int m = 0;for (int i = a; i >0; i--) {m = 0;for (int j = 2; j <= std::sqrt(i); j++) {if (i%j == 0) {m = 1;break;}}if (m == 0) {//std::cout << i << " was the max prime";return i;}}if (m == 0) {//std::cout << a << " was the max prime";return a;}
}

测试

int main()
{const char * url = "xn/live/234";const char * url2 = "xn1/live/2345";const char * url3 = "xn2/live/234";const char * url4 = "xn/abc/23411";const char * url5 = "xn/abcd/234";const char * url6 = "xn/abcd/2345";const char * url7 = "xn/abcd/2346";const char * url8 = "xn/abcd/2347";const char * url9 = "xn/abcd/2348";const char * url10 = "xn/abcd/2349";const char * url11 = "xn2/abcd/2349";cout << hash_add(url, 7) << endl;cout << hash_add(url2, 7) << endl;cout << hash_add(url3, 7) << endl;cout << hash_add(url4, 7) << endl;cout << hash_add(url5, 7) << endl;cout << hash_add(url6, 7) << endl;cout << hash_add(url7, 7) << endl;cout << hash_add(url8, 7) << endl;cout << hash_add(url9, 7) << endl;cout << hash_add(url10, 7) << endl;cout << hash_add(url11, 7) << endl;int ct = core_thread();int g = hash_next_prime(ct);cout << "the prime is :" << g<<endl;cout << hash_add(url, g) << endl;}

得到核数的函数

static int core_thread()
{static int g_thread_core = 0 ;if (g_thread_core > 0)return g_thread_core;int cpu_core = std::thread::hardware_concurrency();g_thread_core = hash_next_prime(cpu_core);return g_thread_core;
}

寻找素数分配线程算法相关推荐

  1. 少儿编程150讲轻松学Scratch(十)-用scratch编程实现寻找素数

    前言 Scratch中包含了很多有趣的数学知识,有些孩子可能一开始对数学没兴趣,但看到Scratch中有趣的界面和设置之后,反而对于数学知识能有进一步认识.今天要给大家讲解的是判断素数. 题目:找出1 ...

  2. [数论] Miller_Rabbin算法判断大素数,Pollard_rho算法进行质因素分解

    讲解转载于:http://www.cnblogs.com/rainydays/archive/2011/09/01/2162049.html   http://blog.sina.com.cn/s/b ...

  3. 关于快速寻找素数的方法

    利用素数筛选法进行素数的快速查找. 原理很简单,素数一定是奇数,素数的倍数一定不是素数. 思路如下: 预定义N表示10000,即表示查找10000以内的素数,首先定义数组prime[]对N以内的数进行 ...

  4. C++ Fermat‘s little theorem费马小定理寻找模逆实现算法(附完整源码)

    C++ Fermat's little theorem费马小定理寻找模逆实现算法 C++ Fermat's little theorem费马小定理寻找模逆实现算法完整源码(定义,实现,main函数测试 ...

  5. 素数环 与 算法 全排列

    在说起全排列前,先说一下昨天碰到的一个题目(答案不是我做出来的,但是我感觉有好多个亮点,贴出来方便日后的学习): 素数环 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 ...

  6. 判断素数或者求出素数的基本算法 《挑战程序设计竞赛》

    2018-2-28 首先我们得明确一个概念,那就是什么是素数,据我的了解,素数就是除了1和它本身之外,不存在其他的因数的数. 1.素性测试 判断给定的数n是否是素数 这应该是最简单的了,直接从2至n, ...

  7. Python:实现hill climbing爬山法用来寻找函数的最大值算法(附完整源码)

    Python:实现hill climbing爬山法用来寻找函数的最大值算法 import mathclass SearchProblem:def __init__(self, x: int, y: i ...

  8. 求素数的三大算法 —— C 语言 篇

    求素数的三大算法 -- C 语言 篇 文章目录 求素数的三大算法 -- C 语言 篇 算法一 :暴力遍历 思路: 代码: 算法二:折半范围遍历 思路: 代码: 算法三:根号范围遍历 思路: 代码: 总 ...

  9. Miller_Rabbin算法判断大素数,Pollard_rho算法进行质因素分解

    Miller-rabin算法是一个用来快速判断一个正整数是否为素数的算法.它利用了费马小定理,即:如果p是质数,且a,p互质,那么a^(p-1) mod p恒等于1.也就是对于所有小于p的正整数a来说 ...

最新文章

  1. GAN生成的结果多样性不足怎么办?那就再添一个鉴别器!
  2. c++计算eigen随笔(3)-求逆
  3. Hibernate主键生成策略总结(这里面讲的很详细)
  4. STL源码剖析---vector
  5. redux-4-ways
  6. 一个简单的完成端口(服务端/客户端)类
  7. yum install git Could not resolve host: ftp.twaren.net; Unknown error
  8. 轨迹跟踪_预描点寻找
  9. 基于MySQL的调度系统_仓储调度系统的设计与实现(SSH,MySQL)
  10. 她力量系列八丨陈丹琦:我希望女生能够得到更多的机会,男生和女生之间的gap会逐渐不存在的
  11. IOS开发之逆向分析
  12. 微信小程序开发之视频上传
  13. 正规手游代理该怎么选?
  14. 香港资深艺人沈殿霞病逝 享年60岁(图)
  15. @linux下tar解压失败a lone zero解决方法
  16. 开环传递函数判断系统类型_已知系统的开环传递函数,试用Nyquist稳定判据判断系统的稳定性。_学小易找答案...
  17. 请试试看每天吃一碗;白头发不见了,给爸妈留
  18. 不变初心数 (15 分)
  19. 用Modules优雅地管理你的环境变量
  20. 都2021年了,你还不知道混沌工程( Chaos Engineering)?

热门文章

  1. IPSR(中断程序状态寄存器),IPSR包含了当前正在执行的中断服务程序编号,用于识别当前中断。
  2. Linux系列在线培训五月盛情开幕!!(5月9日,10日,16日,17日,23日,24日)18:30 - 21:30,
  3. python采用强制自动缩进使得代码具有极佳的可读性_Python简介
  4. SQL Server安装问题程序被挂起的错误解决办法
  5. url传递中文的解决方案总结
  6. 合成人声、人脸替换等深度合成信息内容须进行显著标识
  7. 威马汽车创始人沈晖:10万以下的不能叫智能电动汽车
  8. 曝张一鸣在游戏群批员工上班时聊游戏,遭回怼:那你退群啊
  9. 京东健康CEO辛利军:感谢刘强东的战略格局和超前眼光
  10. iPhone 12 Pro最新概念图:五摄相机模组也带下巴