C 实战练习题目33 – 质数(素数)判断
Posted kangyifan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C 实战练习题目33 – 质数(素数)判断相关的知识,希望对你有一定的参考价值。
题目:判断一个数字是否为质数。
程序分析:质数(prime number)又称素数,有无限个。一个大于1的自然数,除了1和它本身外,不能被其他自然数整除。
实例:
1 #include<stdio.h> 2 #include<math.h> 3 #define MAX 1000 4 5 6 int prime[MAX]; 7 8 int isPrimeNaive(int n) 9 { 10 if(n <= 1) 11 return 0; 12 for(int i = 2; i < n; i++) 13 if(n % i == 0) 14 return 0; 15 return 1; 16 } 17 18 int isPrime(int n) 19 { 20 if(n<= 1) 21 return 0; 22 if(n == 2) 23 return 1; 24 if(n%2 == 0) 25 return 0; 26 int limit = (int)sqrt((double)n); 27 for(int i = 3; i <= limit; i=i+2) 28 { 29 if(n % i == 0) 30 return 0; 31 } 32 return 1; 33 } 34 35 void sieve() 36 { 37 prime[0] = 0; 38 prime[1] = 0; 39 for(int i = 2; i < MAX; i++) 40 prime[i] = 1; 41 int limit = (int)sqrt((double)MAX); 42 for(int i = 2; i <= limit; i++) 43 { 44 if(prime[i]) 45 for(int j = i*i; j <= MAX; j+=i) 46 prime[j] = 0; 47 } 48 } 49 50 int isPrimeSieve(int n) 51 { 52 if(prime[n]) 53 return 1; 54 else 55 return 0; 56 } 57 58 int main() 59 { 60 sieve(); 61 printf("N=%d %d ", 1, isPrime(1)); 62 printf("N=%d %d ", 2, isPrime(2)); 63 printf("N=%d %d ", 3, isPrime(3)); 64 printf("N=%d %d ", 4, isPrime(4)); 65 printf("N=%d %d ", 7, isPrime(7)); 66 printf("N=%d %d ", 9, isPrime(9)); 67 printf("N=%d %d ", 13, isPrime(13)); 68 printf("N=%d %d ", 17, isPrime(17)); 69 printf("N=%d %d ", 100, isPrime(100)); 70 printf("N=%d %d ", 23, isPrime(23)); 71 printf("N=%d %d ", 1, isPrime(1)); 72 return 0; 73 }
以上实例输出结果为(末尾数字 1 表示是质素,0 表示不是质素):
N=1 0 N=2 1 N=3 1 N=4 0 N=7 1 N=9 0 N=13 1 N=17 1 N=100 0 N=23 1 N=1 0
感谢你的阅读,请用心感悟!希望可以帮到爱学习的你!!分享也是一种快乐!!!请接力。。。
以上是关于C 实战练习题目33 – 质数(素数)判断的主要内容,如果未能解决你的问题,请参考以下文章