SICP 计算机程序的构造和解释 1.21 寻找因子 Scheme、C++实现

寻找素数因子

要求用书中的smallest-divisor过程找出199, 1999, 19999的最小因子。

Scheme Code:

主要流程:

定义寻找素数的过程

如果2的平方即4,大于测试值,那么它肯定是素数

如果n能和2整除,那么不是素数,最小因子是2

如果不是,回到过程find-div,再试试能不能与2+1整除,循环

#lang racket
(define (square x)
  (* x x))
;定义筛选
(define (smallest-div n)
  (find-div n 2))

(define (find-div n td)
  (cond ((> (square td) n) n)
        ((divd? td n) td)
        (else (find-div n (+ td 1)))))
 
(define (divd? a b)
  (= (remainder b a) 0))
;primer过程,如果满足条件那么等于true,否则false,用#t和#f表示,类似bool
(define (primer? n)
  (= n (smallest-div n)))

测试:

IN:

(primer? 3)

(smallest-div 199)

(smallest-div 1999)

(smallest-div 19999)

OUT:

#t

199

1999

7

C++ Code:

int square(int x){
    int sum = x*x;
    return sum;
}
int find_div(int n,int td){
    if (square(td)>n)
    {
       return n;
    }
    else if (!(n%td))
    {
       return td;
    }
    else
    {
       find_div(n, td + 1);
    }
}
int _tmain(int argc, _TCHAR* argv[])
{
    int a, b,real;
    cin >> a >> b;
    real = find_div(a, b);
    cout << real << endl;
    return 0;
}
时间: 2024-10-25 18:51:41

SICP 计算机程序的构造和解释 1.21 寻找因子 Scheme、C++实现的相关文章

计算机程序的构造和解释 1.21 寻找素数因子

寻找素数因子 要求用书中的smallest-divisor过程找出199, 1999, 19999的最小因子. Scheme Code: 主要流程: 定义寻找素数的过程 如果2的平方即4,大于测试值,那么它肯定是素数 如果n能和2整除,那么不是素数,最小因子是2 如果不是,回到过程find-div,再试试能不能与2+1整除,循环 #lang racket (define (square x) (* x x)) ;定义筛选 (define (smallest-div n) (find-div n

迭代法对数计算B的N次方 SICP 计算机程序的构造和解释 1.16

使用Scheme的对数迭代法: #lang racket ;;N是偶数:b^n = (b^(n/2))^2 (define (square x) (* x x));定义乘积函数 (define (fast-expt b n);筛选 (expt-iter b n 1)) (define (expt-iter b n a) (cond ((= n 0) a);当n= 0,值为1 ((even? n)(expt-iter (square b)(/ n 2) a));判断是否为偶数 ((odd? n)(

SICP~计算机程序的构造和解释~ 1.12 c++实现

题目: 采用递归计算过程计算出帕斯卡三角形的各个元素. row:0        11       1 12      1 2 13     1 3 3 14    1 4 6 4 15   . . . . . .col: 0 1 2 3 4 //c++ //递归 #include<iostream> using namespace std; int pascaler(int row ,int col){ int value; if(col>row) { cout<<&quo

《计算机程序的构造和解释(第2版)》【PDF】下载

<计算机程序的构造和解释(第2版)>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230382255 内容简介 <计算机程序的构造和解释(原书第2版)>1984年出版,成型于美国麻省理工学院(MIT)多年使用的一本教材,1996年修订为第2版.在过去的二十多年里,<计算机程序的构造和解释(原书第2版)>对于计算机科学的教育计划产生了深刻的影响.第2版中大部分重要程序设计系统都重新修改并做过测试,包括各种解释器和编译器.

计算机程序的构造和解释原书第2版PDF

作者: Harold Abelson / Gerald Jay Sussman / Julie Sussman 出版社: 机械工业出版社 副标题: 原书第2版 原作名: Structure and Interpretation of Computer Programs 译者: 裘宗燕 出版年: 2004-2 页数: 473 定价: 45.00元 装帧: 平装 内容简介 · · · · · · <计算机程序的构造和解释(原书第2版)>1984年出版,成型于美国麻省理工学院(MIT)多年使用的一本

计算机程序的构造和解释笔录(1):构造过程抽象

Q: SICP是讲软件工程么? A:部分,但并非全部.主要是模块化和黑盒抽象,计算机中两大主要基本思想.SICP关心的是:"当系统复杂度爆炸时(或者在此之前),我们如何通过有效的方法和手段去控制系统的复杂度?" Q: SICP是讲编译原理么? A: 部分,另外,如同书名说描述的那样,SICP中的"编译"都是"解释",这种解释的行为,无外乎就是用一种机器的计算行为去模拟另一种机器. 一个计算机语言并不仅仅是让计算机去执行操作的一种方式,而是一种表达

斐波那契算法的对数解法 计算机程序的构造和解释 习题1.19

程序由Scheme语言编写,待会上别的语言实现. #lang racket ;斐波那契对数法 ;筛选 (define (fib n) (fib-iter 1 0 0 1 n)) (define (square x) (* x x)) (define (fib-iter a b p q count) (cond ((= count 0) b);count = 0时,fib(1) = 0 ((even? count);如果是偶数,那么,p,q的值分别为 ;p = p^2 + q^2 ;q = 2pq

SICP 第一章 构造过程抽象 1

Chapter 1 Building Abstractions with Procedures .title { text-align: center } .todo { font-family: monospace; color: red } .done { color: green } .tag { background-color: #eee; font-family: monospace; padding: 2px; font-size: 80%; font-weight: normal

SCIP习题 1.21(寻找最小因子)

(define (smallest-divisor n) (find-divisor n 2)) (define (find-divisor n test-divisor) (cond ((> (square test-divisor) n) n) ((divides? n test-divisor) test-divisor) (else (find-divisor n (+ test-divisor 1))))) (define (divides? a b) (= (remainder a