“利用值域为1到7整数的随机数发生器(均匀分布),生成均匀分布的1到10的整数。”

MATLAB GUI图像加密工具:XOR、像素置乱与Arnold变换算法实现 图像加密是信息安全与多媒体处理交叉领域的重要技术,其核心原理在于通过特定算法改变图像的像素值或空间位置,使其在视觉和统计特性上变得不可识别,从而保护图像内容。从技术价值看,图像加密不仅用于隐私保护,也是数字版权管理、安全通信等场景的关键环节。在工程实践中,异或(XOR)加密因其可逆性和计算高效性,常作为理解流加密的入门算法;像素置乱则通过破坏图像的空间相关性来增强安全性。本文聚焦于利用MATLAB GUI集成XOR、像素置乱及Arnold变换等经典算法,构建一个可视化的图像加解密原型工具,通过直观的图形界面 阅读详情

设random()是给定的随机数发生器。

1.开始想直接 random() * 10 / 7,不行:这就是个一一映射,结果仍只有7种。
2.原均值为4,设想(random() + random() + random() + random() + random() ) / 4,那会儿已经开始胡思乱想,巫毒编程了尴尬

这种方法结果更差,事实上这种变换得到的甚至不是均匀分布,有点象正态分布了。

3.先扩大,再试图通过除法或模运算来限定到1~10,不知基于什么理论,朴素地感觉不靠谱。

4.打开本《概率论》,翻到《离散随机变量的函数》,哦,变换后要对值相等的结果进行概率合并。

乘以常数是不能扩展值域的,取两个随机变量相乘可以。统计下:

#include <iostream>
#include <iostream>
#include <iomanip>
using namespace std;int prod_cnt[50];
int cnt_cnt[50];int main()
{
  for(int i = 1; i <= 7; ++i){
    for(int j = 1; j <= 7; ++j){
      prod_cnt[i*j] += 1;
    }
  }  int max_cnt = 0;
  for(int i = 0; i < 50; ++i){
    if(prod_cnt[i] > max_cnt){ // 记住出现最多的次数
      max_cnt = prod_cnt[i];
    }
    if(prod_cnt[i] >= 1){
      cout << setw(3) << i << setw(3) << prod_cnt[i] << endl;
    }
  }  for(int i = 0; i < 50; ++i){
    ++cnt_cnt[prod_cnt[i]];
  }
  for(int i = 1; i <= max_cnt; ++i){
    cout << "cnt " << i << " occurs " << setw(3) << cnt_cnt[i] << endl;
  }
}

结果:(第一列是积,第二列是出现的次数,如6出现四次:1*6  6*1 2*3  3*2)

  1  1
  2  2
  3  2
  4  3
  5  2
  6  4
  7  2
  8  2
  9  1
 10  2
 12  4
 14  2
 15  2
 16  1
 18  2
 20  2
 21  2
 24  2
 25  1
 28  2
 30  2
 35  2
 36  1
 42  2
 49  1
cnt 1 occurs   6
cnt 2 occurs  16
cnt 3 occurs   1
cnt 4 occurs   2

需要找到至少10种概率相等(出现次数相等)的积:
出现次数为1、3、4的结果总数都不够,只有次数为2的可用,从中任选10种,替换为1到10即可。测试:

#include <iostream>
#include <iomanip>
using namespace std;

#include "wzRandom64.hpp"

class Rand10
{
  wz::Random64 m_rng;

public:
  long long gen()
  {
    long long x = 0;
    do{
      x = m_rng.genIntBetween(1, 7) * m_rng.genIntBetween(1, 7);
      switch(x){
      case  2: x =  1; break;
      case  3: x =  2; break;
      case  5: x =  3; break;
      case  7: x =  4; break;
      case  8: x =  5; break;
      case 10: x =  6; break;
      case 14: x =  7; break;
      case 15: x =  8; break;
      case 18: x =  9; break;
      case 20: x = 10; break;
      default:
        x = 0; break;
      }
    }while(x == 0);
    return x;
  }
};

int const AVG_CNT = 1000000;
int const RESULT_CNT = 10;
int const TOTAL_CNT = AVG_CNT * RESULT_CNT;
int counter[RESULT_CNT + 1];

int main(int argc, char const * argv[])
{
  Rand10 rng;
  for(int i = 0, x; i < TOTAL_CNT; ++i){
    x = rng.gen();
    ++counter[x];
  }

  for(int i = 1; i <= RESULT_CNT; ++i){
    cout << "[" << setw(2) << i << "] " << setw(10) << counter[i] << setw(12) << setprecision(8) << fixed << (counter[i] - AVG_CNT)*1.0 / AVG_CNT << '\n';
  }
}

其中wz::Random64是个根据Mersenne Twister 64位版 改写的伪随机数发生器。

用Numpy中的内置函数实现生成一个随机生成均匀分布(0,1)的10个数据,输出离一个给定值最近的数 最近学习Numpy,根据作业要求写了个简单的代码,用Numpy内置函数随机生成均匀分布(0,1)的10个数据,并输出离一个给定值最近的数。 立即下载

相关推荐

终端效率神器:Tmux 安装与使用全指南

终端效率神器:Tmux 安装与使用全指南

身在被窝_心在编程 1358

“利用值域为1到7整数的随机数发生器(均匀分布),生成均匀分布的1到10的整数。”...

设random()是给定的随机数发生器。 1.开始想直接 random() * 10 / 7,不行:这就是个一一映射,结果仍只有7种。 2.原均值为4,设想(random() + random() + random() + random() + random() ) / 4,那会儿已经开始胡思乱想,巫毒编程了 这种方法结果更差,事实上这种变换得到的甚至不是均匀分布,有点象正态分布了。 3....

数据库天地 688

别再死记硬背了!用这5个Qt Design Studio小项目,彻底玩转核心组件

本文通过5个Qt Design Studio实战项目,帮助开发者深入理解核心组件的协作与应用。从动态登录界面到游戏化任务列表,每个项目都展示了组件属性与交互设计的巧妙结合,让你不再死记硬背,而是真正掌握Qt Design Studio的核心技能。

weixin_29202213的博客 271

由均匀随机数发生器1-7生产出1-10

前提:假设我们拥有一个随机数发生器rand7均匀产生1-7之间随机整数,如何构造rand10均匀产生1-10之间的整数。   分析:由于rand7是均匀产生,因此由均匀分布的概念来说,产生1-7之间的概率是相同的分别是1/7,因此在该条件下,为了满足计算需要可以适当丢弃1-7之间的数字,而不会影响其他数字获取的概率。   假设:rand7由该函数生成: //生成1-7之间的随机数 in...

TianyeWang的博客 5194

海康VM加密狗无法识别常见问题排查

海康VM加密狗无法识别常见问题排查

视觉人机器视觉的博客 2705

UVM对象实例化及覆盖的几种方法

UVM对象实例化的方法有多种,以下以object为例: 1)第一种:直接利用new函数进行实例化 trans t1; t1 = new("t1");//利用new函数进行实例化 2)第二种:uvm_component_registry中提供的方法type_id::create,此种方法也是最常使用的方法 trans t2; t2 = trans::type_id::create("t2",this); 3)第三种:uvm_factory中提供的方法creat_object_by_type trans t

沧月九流的博客 3375

由1-7的随机整数函数构造1-10随机整数函数

题目: 已知有个rand7()的函数,返回1到7随机自然数,让利用这个rand7()构造rand10() 随机1~10。 分析:要保证rand10()在整数1-10的均匀分布,可以构造一个1-10*n的均匀分布的随机整数区间(n为任何正整数)。假设x是这个1-10

ljsspace的专栏 1万+

嵌入式工程师成长之路(3)——PCB设计

带有目的的学:要知道,PCB板子做出来需要我们给厂家哪些东西,我们设计板子的时候,需要遵循哪些设计规范,防止画好也是块废板子。然后再逐步开始学习画板。

云轩阁 8万+

如何把一个生成1-7的随机数的函数re(),重新构造成生成1-10随机数的函数re1()

class Test{ public static int re(){ return new Random().nextInt(7)+1; } public static int re1(){ int i=re()-1; int j=re()-1; i=i*7+j;//i的范围0-48 /...

qq_38522268的博客 421

AI 模型优化与部署秘籍:从理论到实战

本文系统介绍了AI模型优化与部署的关键技术。模型剪枝通过去除冗余参数减小模型规模,量化技术降低计算精度以提升效率,蒸馏方法实现知识从大模型到小模型的迁移。TensorRT通过层融合和精度校准加速GPU推理,ONNX格式实现跨框架模型转换,TFLite则优化移动端部署。这些技术共同解决了AI模型在资源受限环境下的部署难题,显著提升了模型运行效率,为AI应用落地提供了重要支撑。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 245

全网最全-QCC51xx-QCC30xx(TWS)系列从入门到精通开发教程汇总(持续更新中)

QCC3040开发笔记之基本介绍(0) QCC3040开发笔记之开发环境搭建(1) QCC3040开发笔记之debug调试(trb调试,usbt调试,adb调试,WIFI调试)(2) QCC3040开发笔记之按键配置(3) QCC3040开发笔记之按键切换(4) QCC3040开发笔记之按键逻辑(5) QCC3040开发笔记之tone(6) QCC3040开发笔记之提示音(7) QCC3040开发笔记之bitserial接口(8) QCC3040开发笔记之双mic+AEC+ANC(9...

心跳包的博客 3万+

利用1到7的随机数,产生一个1到10的随机数

这是我面试百度实习二面遇到的算法题,很可惜,我没做出来。。。。 不过既然没有做出来,岂能善罢甘休!面试完通过思考,查询,终于把这题整出来了,也算是圆了一个小遗憾吧。 利用 1到7 的随机数产生一个 1到10的随机数,要求是等概率的。倘若不是等概率就很好做了,直接乘9之后再除以7就可以得到答案了。可是,这样没有达到要求。 我们可以先用1到7的随机数生成器减去1,rand7()-1这样就可以得到一个[0, 6]的随机数生成器,然后乘以7得到一个(0,7,14,21,28,35,42)的随机数生成器,然后都加上[

qq_45679717的博客 6327

Python 爬虫 + 数据分析:社会调查数据抓取与结果可视化分析

在当今数字化时代,数据已成为推动社会发展的关键资源之一。无论是市场调研、学术研究还是政策制定,社会调查数据都扮演着至关重要的角色。通过 Python 爬虫技术,我们可以高效地获取这些数据,并结合数据分析与可视化工具,深入挖掘数据背后的价值。本文将通过一个完整的实战项目,带你掌握如何使用 Python 爬虫抓取社会调查数据,并进行可视化分析。

yansideyucsdn的博客 126

随机数生成算法【详解,归纳】

1、蒙特卡洛方法 蒙特卡罗方法又称统计模拟法、随机抽样技术,是一种随机模拟方法,以概率和统计理论方法为基础的一种计算方法,是使用随机数(或更常见的伪随机数)来解决很多计算问题的方法。将所求解的问题同一定的概率模型相联系,用电子计算机实现统计模拟或抽样,以获得问题的近似解。为象征性地表明这一方法的概率统计特征,数学家冯·诺依曼用闻名世界的赌城——蒙特卡罗命名(就是那个冯·诺依曼)。 蒙特卡罗方...

weixin_30765505的博客 2943

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

【原创】开源Math.NET基础数学类库使用(12)C#随机数扩展方法

本博客所有文章分类的总目录:【总目录】本博客博文总目录-实时更新 开源Math.NET基础数学类库使用总目录:【目录】开源Math.NET基础数学类库使用总目录 前言   真正意义上的随机数(或者随机事件)在某次产生过程中是按照实验过程中表现的分布概率随机产生的,其结果是不可预测的,是不可见的。而计算机中的随机函数是按照一定算法模拟产生的,其结果...

alad64007的博客 195

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

开源Math.NET基础数学类库使用(12)C#随机数扩展方法

原文:【原创】开源Math.NET基础数学类库使用(12)C#随机数扩展方法 本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/p/4288836.html 开源Math.NET基础数学类库使用总目录:http://www.cnblogs.com/asxinyu/p/4329737.ht...

weixin_33874713的博客 104

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

基于DRPE与压缩感知的图像加密方案及MATLAB实现

图像加密是保障敏感视觉数据安全的核心技术,传统的空域置乱与扩散方法往往面临密文体积庞大、密钥体系单一等瓶颈。压缩感知理论允许以远低于奈奎斯特采样率获取稀疏信号,而双随机相位编码通过空域与频域的随机相位调制将图像信息打散为类噪声复值分布。两者结合不仅保留了DRPE的高密钥敏感性与强视觉安全性,还借助CS的测量压缩特性显著降低传输和存储开销,形成安全性与效率兼优的加密范式。该方案广泛适用于遥感影像、医学图像等大规模敏感数据传输场景,也为物联网设备提供了轻量化加密思路。文章基于MATLAB环境,完整实现了随机相位

weixin_28365523的博客 242

利用1~7的随机数,产生一个1~10的随机数

必须是等概率的。 int rand10() { int i = rand7() - 1; int j = rand7() - 1; int num = rand7()*i + j; if ( num >= 40 ) return rand10(); else return num%10 + 1; } 这题一开始我做的时候,我以为直接对这个ra

mfcheer 2643

使用随机数7生成随机数10

文章目录1、描述2、关键字3、思路4、notes5、复杂度6、code 1、描述 已有方法 rand7 可生成 1 到 7 范围内的均匀随机整数,试写一个方法 rand10 生成 1 到 10 范围内的均匀随机整数。 不要使用系统的 Math.random() 方法。 来源:力扣(LeetCode) 链接: 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 2、关键字 随机数生成随机数, 3、思路 题解思路 4、notes int num = (rand7() - 1) * 7 + r

Tlwhisper的博客 970

Blender——物体的随机分布

在【插件】中的【物体】类型中勾选【Object: Scatter Objects】。右下的活动工具与工作区设置中就会出现【物体散列】的模块,可以调节各参数。中文的话,输入物体散列或者散列物体。为了只对某一个正方体进行编辑,需做以下处理:在物体模式下,点击物体-->关系-->使其独立化-->物体 & 数据-->选定的物体。(先选中要随机分布的物体,后选中待被随机分布的物体)选中随机分布物体,在右下视图中,选择物体属性-实例化-取消显示实例勾选.鼠标在平面上勾画,左下面有物体随机分布的个数显示。

行秋的博客 5706

等概率产生 [1-7] 的随机数

文章目录1. [准备阶段] 产生1-5的随机数Ranom类Math.random()时间戳2. 解决一误区解决思考探究3. 解决二最后一次不是等概率4. 拓展 1. [准备阶段] 产生1-5的随机数 Java中产生随机数的方法主要有三种: new Random() Math.random() currentTimeMillis() Ranom类 边界为rand.nextInt(MAX - MIN + 1) + MIN; public static void randFive(int[] arr) {

iqqcode 6928

已知一个函数rand7()能够生成1-7的随机数,请给出一个函数rand10(),该函数能够生成1-10的随机数。

题目: 已知一个函数rand7()能够生成1-7的随机数,请给出一个函数,该函数能够生成1-10的随机数。 思路: 假如已知一个函数能够生成1-49的随机数,那么如何以此生成1-10的随机数呢? 解法: 该解法基于一种叫做拒绝采样的方法。主要思想是只要产生一个目标范围内的随机数,则直接返回。如果产生的随机数不在目标范围内,则丢弃该值,重新取样。由于目标范围内的数字被选中的

__七把刀__ 9375
上一篇: HSV色彩转RGB(JAVA版)
下一篇: abcde五人打渔
CodeArhat
博客等级 码龄15年 13粉丝 38原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值