文档章节

小算法记录

zhuqianli
 zhuqianli
发布于 2017/09/11 20:20
字数 457
阅读 2
收藏 0

write a program that input a positive integer, find out all the prime factors of it. the prime factors of 72 is 2,3 Example 72 =2^3* 3^2 181944 =2^3 *3^2*7*19^2 the prime factors of181944 is 2,3,7,19

public class PrimeAlgorithm {
    public static List factor(long g) {
        List result = new ArrayList(16);
        for (long i = 2; g != 1; i++)
            if (g % i == 0) {
                g /= i;
                result.add(i);
                i--; // i--使得i的值不变,即能把含有的所有的当前质因数, 如 2,除尽后, 再去除下一个指数, 如 3
            }

        return result;
    }

    public static void main(String[] args) {
        List factor = PrimeAlgorithm.factor(2132123);
        System.out.println(factor);
    }
}

 

一段生成分布式全局唯一ID的代码

https://gist.github.com/longkerdandy/a296b7a084fd191af6e4176eed168812


public class IdGenerator {

  // Modeled after base64 web-safe chars, but ordered by ASCII.
  private final static String ID_CHARS = "-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz";

  // Pseudorandom number generator
  private final Random random;

  // Timestamp of last push, used to prevent local collisions if you push twice in one ms.
  private long lastTimestamp = 0L;

  // We generate 72-bits of randomness which get turned into 12 characters and appended to the
  // timestamp to prevent collisions with other clients.  We store the last characters we
  // generated because in the event of a collision, we'll use those same characters except
  // "incremented" by one.
  private int[] lastRandChars = new int[12];

  /**
   * Create a new IdGenerator with specific Random instance
   *
   * @param random Random, SecureRandom or ThreadLocalRandom
   */
  public IdGenerator(Random random) {
    this.random = random;
  }

  /**
   * Generate next chronological 20-character unique id
   *
   * @return New ID
   */
  public String nextId() {
    long now = System.currentTimeMillis();
    char[] result = new char[20];

    // random chars
    int[] randChars = compareAndUpdate(now);
    for (int i = 0; i < 12; i++) {
      result[i + 8] = ID_CHARS.charAt(randChars[i]);
    }

    // timestamp chars
    for (int i = 7; i >= 0; i--) {
      final Long module = now % 64;
      result[i] = ID_CHARS.charAt(module.intValue());
      now = (long) Math.floor(now / 64);
    }
    if (now != 0) {
      throw new AssertionError("We should have converted the entire timestamp.");
    }

    return new String(result);
  }

  /**
   * Compare the timestamp and update last record state. To be thread safe, all the compare and
   * update operation are included in this method
   *
   * @param timestamp Timestamp
   * @return Random Chars should be used
   */
  private synchronized int[] compareAndUpdate(long timestamp) {
    if (timestamp != this.lastTimestamp) {
      // If the timestamp has changed since last request, create a new random number.
      this.lastTimestamp = timestamp;
      for (int i = 0; i < 12; i++) {
        this.lastRandChars[i] = this.random.nextInt(64);
      }
    } else {
      // If the timestamp hasn't changed since last request, use the same random number, except incremented by 1.
      int i;
      for (i = 11; i >= 0 && lastRandChars[i] == 63; i--) {
        this.lastRandChars[i] = 0;
      }
      if (i < 0) {
        i = 11;
      }
      this.lastRandChars[i]++;
    }
    // return a new array
    return this.lastRandChars.clone();
  }
}

 

© 著作权归作者所有

共有 人打赏支持
zhuqianli
粉丝 5
博文 131
码字总数 57017
作品 0
杭州
程序员
MySQL的JOIN(二):JOIN原理

表连接算法 Nested Loop Join(NLJ)算法: 首先介绍一种基础算法:NLJ,嵌套循环算法。循环外层是驱动表,循坏内层是被驱动表。驱动表会驱动被驱动表进行连接操作。首先驱动表找到第一条记录...

文文1
04/01
0
0
简谈常用算法

生活木有捷径 写在前面 算法,对于iOS开发者来说,既熟悉又陌生。首先,在iOS开发过程中,对算法要求不高,用到算法时候也是少之甚少,除非是一些接近底层开发需要用到一些算法。但是,算法作...

Jack_lin
2017/03/18
0
0
以太坊的 DPoS 算法实现 - Go Ethereum Meitu

Go Ethereum 项目是美图技术团队在以太坊上实现的 DPoS 算法,是以太坊协议的 Go 语言实现,目前尚处于实验阶段。 查看官方的实现版本>>>https://www.oschina.net/p/go-ethereum 基于 Ethere...

匿名
06/15
0
0
页面置换算法 LRU & LFU 算法

页面置换算法介绍 评价一个页面替换算法好坏的标准主要有两个,一是命中率要高,二是算法要容易实现。要提高一个页面替换算法的命中率,首先要使这种算法能正确反映程序的局部性,其次是这种...

满小茂
2016/01/15
1K
0
冒泡排序(Bubble Sort)

1、定义 冒泡排序(Bubble Sort)是一种交换排序。 应用交换排序基本思想的主要排序方法有:冒泡排序和快速排序。 2、基本思想 两两比较待排序记录的关键字,发现两个记录的次序相反时即进行...

野渡书生
2016/04/29
29
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

day60-20180818-流利阅读笔记-待学习

钉钉:工作的归工作,生活的…也归工作? 毛西 2018-08-18 1.今日导读 你用过“钉钉”么?被公司要求使用钉钉的感受是如何的呢?这款阿里巴巴旗下的移动办公社交平台在弯道超车微信、为许多企...

aibinxiao
45分钟前
6
0
Kubernetes的HTTPS和证书问题,汇总

通过Kubernetes建立服务网站,需要干的事情和HTTPS和证书问题,汇总如下: 建立Nginx服务器 搞服务器第一步,Ubuntu 18.04设置静态IP 安装Nginx服务。 Kubernetes的deployment使用 创建服务,...

openthings
今天
2
0
php 使用redis锁限制并发访问类

1.并发访问限制问题 对于一些需要限制同一个用户并发访问的场景,如果用户并发请求多次,而服务器处理没有加锁限制,用户则可以多次请求成功。 例如换领优惠券,如果用户同一时间并发提交换领...

豆花饭烧土豆
今天
0
0
Linux环境搭建 | 手把手教你配置Linux虚拟机

在上一节 「手把你教你安装Linux虚拟机」 里,我们已经安装好了Linux虚拟机,在这一节里,我们将配置安装好的Linux虚拟机,使其达到可以开发的程度。 Ubuntu刚安装完毕之后,还无法进行开发,...

良许Linux
今天
0
0
(三)Nginx配置·续

概述 前文写了关于Nginx环境配置,但是还没有完,接下来将会继续讲三个相关的配置 主要是以下三个 1.Nginx访问日志 2.Nginx日志切割 3.静态文件不记录日志和过期时间 Nginx访问日志 1.先看看...

杉下
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部