PHP Prime Number Function

//快速计算某个值以内的质数
function getPrimeNumbers($n)
{
    $sieve = [];
    for($i = 1; $i <= $n; $i++) {
        $sieve[$i] = $i;
    }

    $i =2;
    while($i * $i <= $n) {
        if(isset($sieve[$i])) {
            $k = $i;
            while ($k * $i <= $n) {
                unset($sieve[$k * $i]);
                $k++;
            }
        }
        $i++;
    }
    return $sieve;
}

php 抽奖概率算法

/* 
 * 不同概率的抽奖原理就是把0到*(比重总数)的区间分块
 * 分块的依据是物品占整个的比重,再根据随机数种子来产生0-* 中的某个数
 * 判断这个数是落在哪个区间上,区间对应的就是抽到的那个物品。
 * 随机数理论上是概率均等的,那么相应的区间所含数的多少就体现了抽奖物品概率的不同。
 */  


function get_rand($proArr)
{
$result = array();
foreach ($proArr as $key => $val) { 
    $arr[$key] = $val['v']; 
}  
$proSum = array_sum($arr);      // 计算总权重
$randNum = mt_rand(1, $proSum);
$d1 = 0;
$d2 = 0;
for ($i=0; $i < count($arr); $i++)
{
    $d2 += $arr[$i];
    if($i==0)
    {
        $d1 = 0;
    }
    else
    {
        $d1 += $arr[$i-1];
    }
    if($randNum >= $d1 && $randNum <= $d2)
    {
        $result = $proArr[$i];
        break; // 注意这里,当我们已经匹配到奖品时,就应该直接退出循环
    }
}
unset ($arr); 
return $result;


}

mysql中字符和数字在执行sql时进行类型转换

转自:http://blog.csdn.net/likunlun1234/article/details/41045299

https://www.cnblogs.com/micrari/p/6358652.html

select * from v_samp_register where is_end=1;
select * from v_samp_register where is_end=’1′;
is_end是int型,数据库中is_end是1或者0,上面两条语句执行结果怎么就一致了呢???

因为mysql不确定是哪个版本后,执行sql时,会按where条件的类型进行类型自动转换————感觉误导人

Mysql中前边有0的数据,0会被舍去的问题

最近由于项目的需求,需要频繁地拉取不同数据库中的数据,拉取数据的过程中,各种问题,十分悲催,真所谓,一个疏忽,你就要被推倒重来…

在经历了无数次被推倒又站起来,然后又被推倒的艰苦奋斗历程之后,终于完成了数据的迁移、更新、同步、修复。总结一下这期间遇到的部分问题:

1、Mysql中前边有0的数据,0会被舍去的问题

如一条数据为0371xxx,存入数据库后数据变为371xxx

(1)如果字段类型必须为int,可以修改字段,增加zero fill,alter table 表名称 modify 字段名称 int  not null zero fill;

(2)如果不必须为int,修改字段类型为字符串类型,另外sql语句中该字段数据一定要加引号,不加引号即使为字符串类型也会丢失前边的0

2、某些数据部分字段出现错误,而很多数据未出错字段又已做过修改

在数据库中增加一个isexists字段,默认为0.

主键判断数据是否存在,存在更新相应字段,不存在插入,更新与插入的数据isexists设置为1

更新完成后删除isexists为0的数据。确认数据无误后删除isexists字段。

公司项目代码中,某枚举字段数据库表中类型是char(1),在代码中,误以为是TINYINT,所以用数字筛选,后来发现结果不对。发现了一个现象,用数字0筛选会把所有的记录给筛选出来。
经过排查发现是在MySQL查询语句中,’abc’如果和’0’比较结果显然是不等的,但如果’abc’和0比较呢?结果居然是相等的。

随意测试了几下,结果如下:

  1. mysql> select ‘abc’=0;
  2. +———+
  3. | ‘abc’=0 |
  4. +———+
  5. | 1 |
  6. +———+
  7. 1 row in set, 1 warning (0.00 sec)
  1. mysql> select ‘0abc’=0;
  2. +———-+
  3. | ‘0abc’=0 |
  4. +———-+
  5. | 1 |
  6. +———-+
  7. 1 row in set, 1 warning (0.00 sec)
  1. mysql> select ’01abc’=0;
  2. +———–+
  3. | ’01abc’=0 |
  4. +———–+
  5. | 0 |
  6. +———–+
  7. 1 row in set, 1 warning (0.00 sec)
  1. mysql> select ‘013abc’=13;
  2. +————-+
  3. | ‘013abc’=13 |
  4. +————-+
  5. | 1 |
  6. +————-+
  7. 1 row in set, 1 warning (0.00 sec)

以上几个查询通过查看MySQL给出的警告,都可以看到类似如下的信息

  1. mysql> show warnings;
  2. +———+——+——————————————–+
  3. | Level | Code | Message |
  4. +———+——+——————————————–+
  5. | Warning | 1292 | Truncated incorrect DOUBLE value: ‘013abc’ |
  6. +———+——+——————————————–+
  7. 1 row in set (0.00 sec)

查阅MySQL 5.7官方文档中关于比较的章节,其中说明Strings are automatically converted to numbers and numbers to strings as necessary.。也就是说在比较的时候,String是可能会被转为数字的。

而对于数字开头的字符串来说,转为数字的结果就是截取前面的数字部分

  1. mysql> select cast(‘123abc’ as signed);
  2. +—————————–+
  3. | cast(‘123abc’ as signed) |
  4. +—————————–+
  5. | 123 |
  6. +—————————–+
  7. 1 row in set, 1 warning (0.00 sec)
  1. mysql> select cast(‘123.45abc’ as decimal(5,2));
  2. +———————————–+
  3. | cast(‘123.45abc’ as decimal(5,2)) |
  4. +———————————–+
  5. | 123.45 |
  6. +———————————–+
  7. 1 row in set (0.00 sec)
  1. mysql> select cast(‘abc’ as signed);
  2. +———————–+
  3. | cast(‘abc’ as signed) |
  4. +———————–+
  5. | 0 |
  6. +———————–+
  7. 1 row in set, 1 warning (0.00 sec)

“`

而对于开头部分不能截取出数字的字符串来说,转换的结果自然就是0了。

关于字符串类型与整数直接进行比较的坑,说穿了就是MySQL中字符串转为数字的逻辑,没遇到过确实可能不太清楚,遇到过一次以后经验就是,看清楚数据库表字段,尽量避免字符串与数字的直接比较。

此外,书写sql语句的时候务必注意不要犯类型的错误,也许查出来的结果是对的,但是由于类型不匹配的原因,将会导致表索引无法用上

Vultr搭建SSR + 锐速 手把手教程

第一部分:创建服务器

目前亲测有效!!!

一、Vultr官方地址:点击这里

 

二、注册地址:https://www.vultr.com/?ref=7451740 (使用本地址注册才能得到20美元的赠送),进入后按图输入邮箱和要设置的密码(最少10位,要同时有数字和大小写字母),最后点击create account创建

 

 

三、创建服务器,按图一步步走:

 

 

 

 

等待安装完成!

 

 

 

第二部分:SSR搭建

 

一、准备好你的服务器,确认账号(一般是root)和密码,系统建议Centos7 ×64

二、手机用juicessh连接服务器,教程如下

#juicessh使用教程

           (1)进入juicessh

           (2)点上侧连接

           (3)点右下角+

           (4)昵称随意,类型SSH,地址你的服务器ip,端口默认22不变(映射端口和自设端口除外)

           (5)认证选新建

           (6)昵称随意,用户名一般为root,密码填你的服务器密码

           (7)√

           (8)√

           (9)点你设置的配置,如无昵称就是以服务器ip命名

           (10)如无意外,这时就自动登陆服务器了,如果提示你输入密码,再输一遍就行了,输入后记得点保存

           (11)进入服务器后,就可以运行代码了,本机键盘手打或者复制粘帖均可

三、电脑用xshell连接服务器,教程如下

#xshell使用教程

           (1)进入xshell

           (2)点左上角文件

           (3)点新建

           (4)名称随意,协议SSH,主机你的服务器IP,端口默认22不变(映射端口和自设端口除外)

           (5)确定

           (6)选中设置的配置双击打开

           (7)提示输入账号和密码,输入后记得点保存

   (8)进入服务器后,就可以运行代码了,本机键盘手打或者复制粘帖均可

四、进入服务器后,就可以运行SSR代码了

1.     执行以下命令:
wget –no-check-certificate https://freed.ga/github/shadowsocksR.sh;bash shadowsocksR.sh
如提示:
wget :com.m.and not found
请执行:
yum install wget -y
然后按提示操作即可!

2. 到这里一个能科学上网的服务器就搭建完成了,大家下载SSR客户端连接就能科学上网,可是网速虽然可以,但是youtube只能流畅的看720P, 如果你的目标是1080P,请继续往下看!

五、SSR常用命令

#SSR常用命令

   启动:/etc/init.d/shadowsocks start
停止:/etc/init.d/shadowsocksstop
重启:/etc/init.d/shadowsocksrestart
状态:/etc/init.d/shadowsocksstatus

六、 SSR修改密码、配置多端口

#SSR修改密码、配置多端口教程

    (1)输入vi /etc/shadowsocks.json
(2)按“i”进入编辑模式,编辑如下

 

{

“server”: “0.0.0.0”,

“server_ipv6”: “::”,

“local_address”: “127.0.0.1”,

“local_port”: 1081,

“port_password”:{

“端口1″:”密码1”,

“端口2″:”密码2”,

“端口3″:”密码3”,

“端口4″:”密码4”

},

“timeout”: 120,

“udp_timeout”: 60,

“method”: “chacha20”,

“protocol”: “auth_sha1_compatible”,

“protocol_param”: “”,

“obfs”: “http_simple_compatible”,

“obfs_param”: “”,

“dns_ipv6”: false,

“connect_verbose_info”: 0,

“redirect”: “”,

“fast_open”: false,

“workers”: 1

 

}

(3)按esc返回,输入:wq回车保存

(4)输入/etc/init.d/shadowsocks restart重启ssr

(5)如不能联网,则关闭防火墙(逐条输入)

service iptables restart

service iptables stop

chkconfig iptables off

七、SSR提速, 锐速(仅支持KVM,Xen,vmare架构)

1)由于锐速对内核要求严格,所以要先更换内核, 一键更换内核脚本(Vultr需先执行此脚本)

wget-N –no-check-certificate https://freed.ga/kernel/ruisu.sh && bashruisu.sh
脚本执行过程中,请勿进行任何操作。待服务器重启后,重新连接安装锐速即可。
2).锐速安装脚本
wget -N –no-check-certificatehttps://github.com/91yun/serverspeeder/raw/master/serverspeeder.sh &&bash serverspeeder.sh

备用脚本:
wget -N –no-check-certificate https://raw.githubusercontent.com/91yun/serverspeeder/master/serverspeeder-all.sh&& bash serverspeeder-all.sh

锐速成功截图

八、锐速常用命令

启动:/serverspeeder/bin/serverSpeeder.shstart

停止:/serverspeeder/bin/serverSpeeder.shstop

状态:serviceserverSpeeder status

检查是否有appex0模块:lsmod

 

 

第三部分:链接服务器

包含手机和电脑链接:https://pan.baidu.com/s/104pK3NvgDjkd9CzP0QtiRQ密码:8fls