SlideShare uma empresa Scribd logo
1 de 29
算法基础报告



报告人: 1 92092   黄新阳
1 、探究以不同语言书写相同的
算法,其执行时间的差别;
2 、探究不同的素性检验算法间
的复杂度对比
 素数是一个除了 1 和它自身以外不能被任何其它
  数整除的数。素数在数学和计算机科学中起着关
  键的作用,的确这些领域的结果直接来自于对素
  数的性质以及它们的应用的研究。
 素数的一个基本问题是确定一个给定的数是否是
  素数,即素性测试问题。关于素性测试的算法有
  很多种
 现代密码学中的素性测试问题对很多的密码算法
  发展至关重要,如: RS A 公钥加密算法。
国际流行的素性检验算法

1 、基于素数性质的穷举素性测试算法
2 、基于费马小定理的素性测试算法
3 、 AKS 素性测试算法
4 、 Miller-Rabin 素性测试算法算法
5 、 Solovag-Strassen 素性测试算法
6 、 Lehmann 素性测试算法。
          ( 本 PPT 主要讲解 1 、 2 、 4 三种算法 )
素数是一个除了 1 和它自身以外不能被任何其它数整除
的数。
int flag=1;
 for(int i=2;i<a;i++)
  {                                   复杂度为: n
      if(a%i==0)
     {
        flag=0;
         break;
      }
  }
    if(flag==1)
    cout<<"a is a prime!!!"<<endl;
   else
   cout<<"a is not a prime!"<<endl;
Tim e 命令解释:
1 实际时间 (real):
 、              从 command 命令
行开始执行到运行终止的消逝时间;
2 用户 CPU 时间 (user): 命令执行完成
 、



花费的用户 CPU 时间,即命令在用户态中执
行时间总和;
3 系统 CPU 时间 (system): 命令执行完
 、



成花费的系统 CPU 时间,即命令在核心态中
执行时间总和。
#!/bin/bash
echo "input a:“     if [ "$flag" -eq 1 ]
read a              then
i=2                 echo "a is a prime!“
flag=1              else
for ((;i<a;i++))    echo "a is not a prime!“
do                  fi
let "z=a%i“
if [ "$z" -eq 0 ]
then
let "flag=0“                复杂度为: n
break
fi
done
#!/bin/bash
                     then
echo "input a:“       let
read a               "flag=0“
i=2                  break
                     fi
flag=1
                     let "k=i*i“
k=0                  done
let "k=i*i “         if [ "$flag" -eq 1 ]
for((i=2;k<a;i++))   then
                      echo "a is a prime!“
do                   else
let "z=a%i“          echo "a is not a prime!"fi
if [ "$z" -eq 0 ]
int prime(long int k)   int main()
                        {
{
                              long int m=10000;
for(int i=2;i<k;i++)          long int a[10000];
{ if(k%i==0)                  int flag;
  return 0;                   a[0]=1;
}                            for(int i=2;i<m;i++)
return 1;                    {
}                                flag=prime(i);
                                 if(flag==1)
                                  cout<<i<<endl;
                             }
                            system("pause");
                             return 0;
                        }
#!/bin/bash
k=0
echo "please input a:"
read a
sed -n '/$a/p' test.text > primes.txt
if [ -s primes.txt ]
then
echo "a is a prime!"
else
echo "a is not a prime!"
fi
基于费马小定理的素性测试算法
   根据费马小定理:如果 p 是素数, 1<a<p ,那
么 a^(p-1) ≡ 1 mod p 。如果我们想知道 n 是否是
素数,我们在中间选取 a ,看看上面等式是否成立。
如果对于数值 a 等式不成立,那么 n 是合数。如果
有很多的 a 能够使等式成立,那么我们可以说 n 可
能是素数,或者伪素数。在我们检验过程中,有可
能我们选取的 a 都能让等式成立,然而 n 却是合数。
这时 a^(n-1) ≡ 1 mod n 等式被称为 Fermat liar 。
如果我们选取满足下面等式 a^(n-1) ≠ 1 mod n 的 a
那么 a 也就是对于 n 的合数
//// 计算 x,y 的最大公约数
//// 随机数 b 的生成             int gcd(unsigned long
unsigned long              b,unsigned long n)
random(unsigned long       {
m,unsigned long n)           unsigned long k=1;
{                            while(k!=0)
  srand((unsigned            {
long)time(NULL));              k=n%b;
                               n=b;
  return (unsigned long)
                               b=k;
(m+rand()%n);
                             }
}                          return n;

                           }
//// 计算大数字的高次幂的模运算
long PowMod(long x,long y,long n)
{
 long s, t, u;
s=1; t=x; u=y;
while(u)
   {
         if(u & 1)
         { s=(s*t)%n; }
          u>>=1;
          t=(t*t)%n;
    }
       return s;
}
int RabinMillerKnl(unsigned long n)
{
unsigned long b, m, j, v, i;
j=0;
while(!(m & 1))
{
  ++j;
  m>>=1;//m 记录 s/2 之后的奇数 t
}
b=random(2,m);
v=PowMod(b, m, n);
if(v == 1)
        {           // 如果 v=1 则 n 为素数
             return 1;
        }

   i=1;
// 如果 v=n-1 则 n 为素数
   while(v != n - 1)
     {
          if(i == j)
             {
                 return 0;        // 否则,继续循环检验
              }
             v=PowMod(v, 2, n);
             i++;
      }
            return 1;
}
通过对测试数据的分析,可以得出以下结论:
1 、对于最为原始的穷举法,一旦测试数据较大时,预
算时间则会很长,同时耗费内存;
2. 编写算法的语言的类型也直接影响程序的执行速度,
统计分析, c + + 语言的执行速度较 s h e ll脚本的速度快
,
但是通过适当利用 s h e ll脚本的流处理功能,可以提高
程序的执行速度,可以很快得到结果。
3 、通过比较 F e rm at 算法与 Mille r- Rab in 算法
F e rm at 算法对于合数可以很快做出判断,但是对于素
数由于测试次数较多,则需要较长的时间。
Mille r- Rab in 算法比较适合判定强拟素数,但对于合数
的判定则花费时间较长,耗费内存也较多。
谢谢观看


   本 PPT 制作人、报告人: 1 92092
黄新阳

Mais conteúdo relacionado

Destaque

001-A New Role for Finance- Architect of the Enterprise
001-A New Role for Finance- Architect of the Enterprise001-A New Role for Finance- Architect of the Enterprise
001-A New Role for Finance- Architect of the Enterprise
Pedro L.
 
004-Applying the Balanced Scorecard
004-Applying the Balanced Scorecard004-Applying the Balanced Scorecard
004-Applying the Balanced Scorecard
Pedro L.
 

Destaque (18)

Case 2PDF
Case 2PDFCase 2PDF
Case 2PDF
 
Ishika Singh Spicy Photos
 Ishika Singh Spicy Photos Ishika Singh Spicy Photos
Ishika Singh Spicy Photos
 
LlAlekhya New Pics
LlAlekhya New Pics LlAlekhya New Pics
LlAlekhya New Pics
 
Sowmya Latest Stills
Sowmya Latest Stills  Sowmya Latest Stills
Sowmya Latest Stills
 
001-A New Role for Finance- Architect of the Enterprise
001-A New Role for Finance- Architect of the Enterprise001-A New Role for Finance- Architect of the Enterprise
001-A New Role for Finance- Architect of the Enterprise
 
Paket Buku PAUD Harga Rp.90.000,- / paket (10 buku @ Rp.9000)Pengadaan buku p...
Paket Buku PAUD Harga Rp.90.000,- / paket (10 buku @ Rp.9000)Pengadaan buku p...Paket Buku PAUD Harga Rp.90.000,- / paket (10 buku @ Rp.9000)Pengadaan buku p...
Paket Buku PAUD Harga Rp.90.000,- / paket (10 buku @ Rp.9000)Pengadaan buku p...
 
iPad Pilot Project Report
iPad Pilot Project ReportiPad Pilot Project Report
iPad Pilot Project Report
 
Shilpi Sharma New Stills
Shilpi Sharma New StillsShilpi Sharma New Stills
Shilpi Sharma New Stills
 
Alluminothermic welding
Alluminothermic weldingAlluminothermic welding
Alluminothermic welding
 
Case 6PDF
Case 6PDFCase 6PDF
Case 6PDF
 
004-Applying the Balanced Scorecard
004-Applying the Balanced Scorecard004-Applying the Balanced Scorecard
004-Applying the Balanced Scorecard
 
Immediate implants/ esthetic in dentistry
Immediate implants/ esthetic in dentistryImmediate implants/ esthetic in dentistry
Immediate implants/ esthetic in dentistry
 
Communication problem & prospect of sonali bank limited
Communication problem & prospect of sonali bank limited Communication problem & prospect of sonali bank limited
Communication problem & prospect of sonali bank limited
 
Auto motive textile
Auto motive textileAuto motive textile
Auto motive textile
 
Selection of dental implant patients /certified fixed orthodontic courses by ...
Selection of dental implant patients /certified fixed orthodontic courses by ...Selection of dental implant patients /certified fixed orthodontic courses by ...
Selection of dental implant patients /certified fixed orthodontic courses by ...
 
Basic system kp01
Basic system kp01Basic system kp01
Basic system kp01
 
Penerangan
PeneranganPenerangan
Penerangan
 
Natalya Kuznetsova fleurs
Natalya Kuznetsova   fleursNatalya Kuznetsova   fleurs
Natalya Kuznetsova fleurs
 

Semelhante a 算法基础报告

C语言学习100例实例程序
C语言学习100例实例程序C语言学习100例实例程序
C语言学习100例实例程序
yiditushe
 
自然语言处理 中文分词程序实验报告%28含源代码%29
自然语言处理 中文分词程序实验报告%28含源代码%29自然语言处理 中文分词程序实验报告%28含源代码%29
自然语言处理 中文分词程序实验报告%28含源代码%29
aemoe
 
張逸 - 研究所 / 轉學考計算機概論 、公職計算機概要 - 程式語言 - 試閱版
張逸 - 研究所 / 轉學考計算機概論 、公職計算機概要 - 程式語言 - 試閱版張逸 - 研究所 / 轉學考計算機概論 、公職計算機概要 - 程式語言 - 試閱版
張逸 - 研究所 / 轉學考計算機概論 、公職計算機概要 - 程式語言 - 試閱版
逸 張
 
第3章算法与控制语句
第3章算法与控制语句第3章算法与控制语句
第3章算法与控制语句
summerfeng
 

Semelhante a 算法基础报告 (20)

C程式-函式與巨集
C程式-函式與巨集C程式-函式與巨集
C程式-函式與巨集
 
Ihome inaction 篇外篇之fp介绍
Ihome inaction 篇外篇之fp介绍Ihome inaction 篇外篇之fp介绍
Ihome inaction 篇外篇之fp介绍
 
C语言学习100例实例程序
C语言学习100例实例程序C语言学习100例实例程序
C语言学习100例实例程序
 
lambda/closure – JavaScript、Python、Scala 到 Java SE 7
lambda/closure – JavaScript、Python、Scala 到 Java SE 7lambda/closure – JavaScript、Python、Scala 到 Java SE 7
lambda/closure – JavaScript、Python、Scala 到 Java SE 7
 
Bash shell script 教學
Bash shell script 教學Bash shell script 教學
Bash shell script 教學
 
JCConf 2023 - 深入淺出 Java 21 功能
JCConf 2023 - 深入淺出 Java 21 功能JCConf 2023 - 深入淺出 Java 21 功能
JCConf 2023 - 深入淺出 Java 21 功能
 
Python變數與資料運算
Python變數與資料運算Python變數與資料運算
Python變數與資料運算
 
Learning python in the motion picture industry by will zhou
Learning python in the motion picture industry   by will zhouLearning python in the motion picture industry   by will zhou
Learning python in the motion picture industry by will zhou
 
Arrays的Sort算法分析
Arrays的Sort算法分析Arrays的Sort算法分析
Arrays的Sort算法分析
 
自然语言处理 中文分词程序实验报告%28含源代码%29
自然语言处理 中文分词程序实验报告%28含源代码%29自然语言处理 中文分词程序实验报告%28含源代码%29
自然语言处理 中文分词程序实验报告%28含源代码%29
 
Ch7
Ch7Ch7
Ch7
 
程式人雜誌 -- 2015 年9月號
程式人雜誌 -- 2015 年9月號程式人雜誌 -- 2015 年9月號
程式人雜誌 -- 2015 年9月號
 
Ch11 範例
Ch11 範例Ch11 範例
Ch11 範例
 
張逸 - 研究所 / 轉學考計算機概論 、公職計算機概要 - 程式語言 - 試閱版
張逸 - 研究所 / 轉學考計算機概論 、公職計算機概要 - 程式語言 - 試閱版張逸 - 研究所 / 轉學考計算機概論 、公職計算機概要 - 程式語言 - 試閱版
張逸 - 研究所 / 轉學考計算機概論 、公職計算機概要 - 程式語言 - 試閱版
 
竞赛中C++语言拾遗
竞赛中C++语言拾遗竞赛中C++语言拾遗
竞赛中C++语言拾遗
 
第五章
第五章第五章
第五章
 
Python学习笔记
Python学习笔记Python学习笔记
Python学习笔记
 
第3章算法与控制语句
第3章算法与控制语句第3章算法与控制语句
第3章算法与控制语句
 
Javascript Training
Javascript TrainingJavascript Training
Javascript Training
 
在開始工作以前,我以為我會寫扣。
在開始工作以前,我以為我會寫扣。在開始工作以前,我以為我會寫扣。
在開始工作以前,我以為我會寫扣。
 

算法基础报告

  • 3.
  • 4.  素数是一个除了 1 和它自身以外不能被任何其它 数整除的数。素数在数学和计算机科学中起着关 键的作用,的确这些领域的结果直接来自于对素 数的性质以及它们的应用的研究。  素数的一个基本问题是确定一个给定的数是否是 素数,即素性测试问题。关于素性测试的算法有 很多种  现代密码学中的素性测试问题对很多的密码算法 发展至关重要,如: RS A 公钥加密算法。
  • 5. 国际流行的素性检验算法 1 、基于素数性质的穷举素性测试算法 2 、基于费马小定理的素性测试算法 3 、 AKS 素性测试算法 4 、 Miller-Rabin 素性测试算法算法 5 、 Solovag-Strassen 素性测试算法 6 、 Lehmann 素性测试算法。 ( 本 PPT 主要讲解 1 、 2 、 4 三种算法 )
  • 6. 素数是一个除了 1 和它自身以外不能被任何其它数整除 的数。 int flag=1; for(int i=2;i<a;i++) { 复杂度为: n if(a%i==0) { flag=0; break; } } if(flag==1) cout<<"a is a prime!!!"<<endl; else cout<<"a is not a prime!"<<endl;
  • 7. Tim e 命令解释: 1 实际时间 (real): 、 从 command 命令 行开始执行到运行终止的消逝时间; 2 用户 CPU 时间 (user): 命令执行完成 、 花费的用户 CPU 时间,即命令在用户态中执 行时间总和; 3 系统 CPU 时间 (system): 命令执行完 、 成花费的系统 CPU 时间,即命令在核心态中 执行时间总和。
  • 8.
  • 9. #!/bin/bash echo "input a:“ if [ "$flag" -eq 1 ] read a then i=2 echo "a is a prime!“ flag=1 else for ((;i<a;i++)) echo "a is not a prime!“ do fi let "z=a%i“ if [ "$z" -eq 0 ] then let "flag=0“ 复杂度为: n break fi done
  • 10.
  • 11.
  • 12.
  • 13. #!/bin/bash then echo "input a:“ let read a "flag=0“ i=2 break fi flag=1 let "k=i*i“ k=0 done let "k=i*i “ if [ "$flag" -eq 1 ] for((i=2;k<a;i++)) then echo "a is a prime!“ do else let "z=a%i“ echo "a is not a prime!"fi if [ "$z" -eq 0 ]
  • 14.
  • 15. int prime(long int k) int main() { { long int m=10000; for(int i=2;i<k;i++) long int a[10000]; { if(k%i==0) int flag; return 0; a[0]=1; } for(int i=2;i<m;i++) return 1; { } flag=prime(i); if(flag==1) cout<<i<<endl; } system("pause"); return 0; }
  • 16. #!/bin/bash k=0 echo "please input a:" read a sed -n '/$a/p' test.text > primes.txt if [ -s primes.txt ] then echo "a is a prime!" else echo "a is not a prime!" fi
  • 17.
  • 18. 基于费马小定理的素性测试算法 根据费马小定理:如果 p 是素数, 1<a<p ,那 么 a^(p-1) ≡ 1 mod p 。如果我们想知道 n 是否是 素数,我们在中间选取 a ,看看上面等式是否成立。 如果对于数值 a 等式不成立,那么 n 是合数。如果 有很多的 a 能够使等式成立,那么我们可以说 n 可 能是素数,或者伪素数。在我们检验过程中,有可 能我们选取的 a 都能让等式成立,然而 n 却是合数。 这时 a^(n-1) ≡ 1 mod n 等式被称为 Fermat liar 。 如果我们选取满足下面等式 a^(n-1) ≠ 1 mod n 的 a 那么 a 也就是对于 n 的合数
  • 19.
  • 20. //// 计算 x,y 的最大公约数 //// 随机数 b 的生成 int gcd(unsigned long unsigned long b,unsigned long n) random(unsigned long { m,unsigned long n) unsigned long k=1; { while(k!=0) srand((unsigned { long)time(NULL)); k=n%b; n=b; return (unsigned long) b=k; (m+rand()%n); } } return n; }
  • 21. //// 计算大数字的高次幂的模运算 long PowMod(long x,long y,long n) { long s, t, u; s=1; t=x; u=y; while(u) { if(u & 1) { s=(s*t)%n; } u>>=1; t=(t*t)%n; } return s; }
  • 22.
  • 23.
  • 24. int RabinMillerKnl(unsigned long n) { unsigned long b, m, j, v, i; j=0; while(!(m & 1)) { ++j; m>>=1;//m 记录 s/2 之后的奇数 t } b=random(2,m); v=PowMod(b, m, n);
  • 25. if(v == 1) { // 如果 v=1 则 n 为素数 return 1; } i=1; // 如果 v=n-1 则 n 为素数 while(v != n - 1) { if(i == j) { return 0; // 否则,继续循环检验 } v=PowMod(v, 2, n); i++; } return 1; }
  • 26.
  • 27.
  • 28. 通过对测试数据的分析,可以得出以下结论: 1 、对于最为原始的穷举法,一旦测试数据较大时,预 算时间则会很长,同时耗费内存; 2. 编写算法的语言的类型也直接影响程序的执行速度, 统计分析, c + + 语言的执行速度较 s h e ll脚本的速度快 , 但是通过适当利用 s h e ll脚本的流处理功能,可以提高 程序的执行速度,可以很快得到结果。 3 、通过比较 F e rm at 算法与 Mille r- Rab in 算法 F e rm at 算法对于合数可以很快做出判断,但是对于素 数由于测试次数较多,则需要较长的时间。 Mille r- Rab in 算法比较适合判定强拟素数,但对于合数 的判定则花费时间较长,耗费内存也较多。
  • 29. 谢谢观看 本 PPT 制作人、报告人: 1 92092 黄新阳