`

正则表达式判断是否素数、解线性方程

阅读更多
参考文章:
http://coolshell.cn/articles/2704.html
http://www.programcreek.com/2013/10/top-10-questions-for-java-regular-expression/

java里用正则表达式判断是否素数:
public static boolean prime(int n) {
  return !new String(new char[n]).matches(".?|(..+?)\\1+");
}


还可以解方程:
public static void sovleLinearEquation(int result, int...params) {
        if (result <= 0) {
            throw new IllegalArgumentException("result must be positive");
        }
        if (params == null || params.length == 0) {
            throw new IllegalArgumentException("params must not be empty");
        }
        
        //^(.*)\1{A−1}(.*)\2{B−1}$
        StringBuilder p = new StringBuilder("^");
        for (int i = 0, len = params.length; i < len; i++) {
            int param = params[i];
            if (param <= 0) {
                throw new IllegalArgumentException("param must be positive:" + param);
            }
            p.append("(.*)\\").append(i + 1).append("{").append(param - 1).append("}");
        }
        p.append("$");
        Pattern pattern = Pattern.compile(p.toString());
        Matcher matcher = pattern.matcher(new String(new char[result]));
        if (matcher.find()) {
            StringBuilder exp = new StringBuilder();
            for (int i = 0, len = params.length; i < len; i++) {
                exp.append(" + ").append(params[i]).append(" * ").append(matcher.group(i + 1).length());
            }
            if (exp.length() > 0) {
                exp.append(" = " + result);
                System.out.println(exp.substring(3));
            }
        } else {
            System.out.println("unsovleable");
        }
    }

例如:
sovleLinearEquation(51, 17, 12);
sovleLinearEquation(115, 11, 2, 5);
==》
17 * 3 + 12 * 0 = 51
11 * 10 + 2 * 0 + 5 * 1 = 115
0
0
分享到:
评论

相关推荐

    正则表达式与数学(方程式、线性方程)

    在编程实践中,尽管正则表达式可以提供一种快速的判断素数或解决线性方程的方法,但它们并不总是最有效的方法,尤其是在需要精确和高效计算的情况下。正则表达式擅长的是模式匹配,而数学方程式则用于表达和解决数量...

    写出高效率的正则表达式技巧总结

    如果纯粹是为了挑战自己的正则水平,用来实现一些特效(例如使用正则表达式计算质数、解线性方程),效率不是问题;如果所写的正则表达式只是为了满足一两次、几十次的运行,优化与否区别也不太大。但是,如果所写的...

    素数判定与线性方程求解

    例如,考虑方程 `11x + 2y + 5z = 115`,可以通过构建如下的正则表达式 `^(.*)\1{10}(.*)\2{1}(.*)\3{4}$` 来检查是否存在自然数解: - **`^(.*)\1{10}`**:这部分表示寻找一个任意长度的字符串,并且这个字符串...

    计算机数学基础(1)作业2答案

    7. **形式语言与自动机**:这部分内容涉及正则表达式、正规集、有限状态自动机等,是编译原理和形式语言理论的基础。 8. **算法分析**:计算复杂性和算法效率评估是IT专业人员必须掌握的技能。作业可能涉及时间...

    wikioi包 300个程序

    1. **2631 解二元一次方程**:这是一个基础的数学问题,涉及到线性代数的知识。用户需要编写程序来解决形如ax + by = c和dx + ey = f的二元一次方程组,通常可以使用高斯消元法或克拉默法则来求解。 2. **1502 这个...

    数据结构与算法课设题目一 (2).pdf

    8. **递归替换问题**:此问题涉及预处理和文本处理,可以使用递归函数来处理#include指令,同时可能需要结合正则表达式来实现。 9. **数据删除问题**:可以使用哈希表或排序后的双指针技术来去除数组中的重复项,...

    2级Java考试题上机【浙江】

    使用字符串处理方法,如`startsWith()`或正则表达式进行匹配。 5. **阶乘和**: 计算1!+2!+...+10!的和,需要先定义阶乘函数,然后累加各阶乘值。阶乘函数可以通过循环或递归实现。 6. **质数因子**: 输出n的所有...

    OJ用函数以及相关答案

    4. **字符串处理**:字符串的比较、拼接、查找子串、逆转等,以及正则表达式的应用。 5. **排序与搜索**:快速排序、归并排序、堆排序、冒泡排序等,以及二分查找、哈希表查找等。 6. **数据结构**:栈、队列、树...

    北京大学OJ_ACM题集

    4. **数学知识**:数论(质数、模运算、同余方程等)、组合数学、概率论、线性代数。 5. **字符串处理**:模式匹配(KMP、Boyer-Moore算法等)、字符串操作、正则表达式。 6. **其他**:位操作、递归、文件操作、...

    离散数学及其应用 (第四版) Kenneth H.Rosen

    - **正则表达式**:正则语言的表示。 - **有限自动机**:确定型有限自动机与非确定型有限自动机。 - **上下文无关文法**:形式语言的生成规则。 综上所述,《离散数学及其应用(第四版)》不仅涵盖了离散数学的基本...

    百度历年笔试试题汇总

    - 可能涉及URL的解析和验证,需要熟悉URI和URL的规范,理解协议、域名、路径等组成部分,可能需要用正则表达式进行处理。 5. **CPU数据缓存**: - 文件:百度笔试之CPU的数据缓存问题.txt - 这类问题通常考察...

    Backjoon_Notes

    Python的字符串操作和正则表达式将是重要的工具。 7. **数学知识**:一些题目需要利用数学知识,如数论(质数、模运算)、组合数学(排列组合、鸽巢原理)和几何等。 8. **位运算**:位运算在解决一些高效计算问题...

    atCoder

    例如,模运算、质数判断、动态规划中的状态转移方程等。 8. **效率优化**:在atCoder上,时间复杂度和空间复杂度的控制至关重要。学习如何优化代码,减少不必要的计算,以满足比赛的时间限制。 9. **输入/输出**:...

    HackerRankPractice:HackerRank Practice的代码解决方案

    2. **字符串处理**:涉及到字符串操作、模式匹配、正则表达式、DNA序列分析等。 3. **数学问题**:包括数论(质数、最大公约数、最小公倍数等)、几何计算、组合优化等。 4. **动态规划**:这是一种解决问题的方法...

    Hackerrank-question:一些有趣的hackerrank问题代码

    - 正则表达式,用于模式匹配和字符串解析。 5. **图论**: - 图的遍历(DFS、BFS),用于解决最短路径、最小生成树等问题。 - 最小生成树算法(Prim's或Kruskal's)。 - 最短路径算法(Dijkstra's、Bellman-...

    leetcode答案-Leetcode:Leetcode的答案

    - 字符串反转、子串查找、正则表达式等。 5. **递归和迭代**: - 递归:函数直接或间接调用自身,解决复杂问题。 - 迭代:通过循环结构实现,通常更节省内存。 6. **树结构**: - 二叉树:遍历(前序、中序、...

Global site tag (gtag.js) - Google Analytics