c语言求质数因子(质数专题C语言)

1. 什么是质数?

质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数(规定1既不是质数也不是合数)。

2. 列出连续整数

2.1 正序列出连续整数

列出1到15的连续整数

#include <stdio.h> int main(){ int digit; digit = 1; while (digit <= 15){ printf("%d\n", digit); digit = 1; } return 0; }

运行结果:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

2.2 逆序列出连续整数

列出1到15的逆序连续整数

#include <stdio.h> int main(){ int digit; digit = 15; while (digit >= 1){ printf("%d\n", digit); digit -= 1; } return 0; }

运行结果

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1

3. 输出质数

输出小于等于15的所有质数

#include <stdio.h> int main(){ printf("2\n"); int digit; int divisor; for (digit = 3; digit <= 15; digit = 2){ for (divisor = 3; divisor < digit; divisor = 2){ if(digit % divisor == 0){ break; } } if (divisor == digit){ printf("%d\n",digit); } } }

运行结果:

2 3 5 7 11 13

4. 判断是否是质数

c语言求质数因子(质数专题C语言)(1)

题目描述

请对于给定的一个大于1的正整数 (你可以认为测评机给出的 N均小于1000 ),判定它是否是一个质数。

输入格式

测评机会反复运行你的程序。每次程序运行时,你的程序仅需输入一个符合描述的正整数。

输出格式

输出也仅为一行,如果判题机在输入中给出的数字为质数,那么请输出YES;否则,请输出NO。

#include <stdio.h> int main(){ int num = 0; int digit; scanf("%d", &digit); for (int divisor = 2; divisor < digit; divisor ){ if (digit % divisor == 0){ num ; } } if (num == 0){ printf("YES"); } else { printf("NO"); } return 0; }

5. 小于指定值的质数

c语言求质数因子(质数专题C语言)(2)

题目描述

我们都知道,对于一个大于 的整数,如果除了 和它本身,它不再被其它正整数整除,那么我们说它是一个质数。

请对于给定的一个大于 1的正整数 (你可以认为测评机给出的 N均小于1000 ),按从小到大的顺序输出所有小于等于它的质数。

输入格式

测评机会反复运行你的程序。每次程序运行时,你的程序仅需输入一个符合描述的正整数。

输出格式

请按从小到大的顺序输出所有小于等于 的质数,一个数单独占一行。

#include <stdio.h> int main(){ int digit, divisor; scanf("%d",&digit); for (int i = 2; i <= digit; i ){ for(divisor = 2; divisor <= i; divisor ){ if (i % divisor == 0){ break; } } if (i == divisor){ printf("%d\n", divisor); } } return 0; }

6. 筛法列举质数

c语言求质数因子(质数专题C语言)(3)

题目描述

列举所有的大于1小于15的质数。

#include <stdio.h> int main(){ int n = 15; int mark[16] = { 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; int divisor; // 因子数1 int i; for (divisor = 2; divisor * divisor <= n; divisor ){ if(mark[divisor] != 1){ for (int j=2; j <= n / divisor; j ){ mark[divisor * j] = 1; } } } for (divisor = 2; divisor <= n; divisor ){ if (mark[divisor] != 1){ printf("%d\n", divisor); } } return 0; }

7. 利用筛法指定范围的质数

c语言求质数因子(质数专题C语言)(4)

题目描述

对于一个大于1 的整数,如果除了 1和它本身,它不再被其它正整数整除,那么我们说它是一个质数。

请对于给定的一个大于1 的正整数 N(你可以认为测评机给出的 N均小于等于10^6 ),和一个大于1 的正整数M(你可以认为测评机给出的M 均小于等于10^6 ), N一定大于M ,请按从小到大的顺序输出所有小于等于N 且大于等于M的质数。

#include <stdio.h> #include <string.h> int n = 1000000; int mark[100001]; int main(){ int divisor; int j; memset(mark, 0, sizeof(mark)); mark[0] = 1; mark[1] = 1; for (divisor =2; divisor * divisor <= n; divisor ){ // 请在此完成功能 if(mark[divisor] != 1){ for (j = 2; j <= n / divisor; j ){ mark[divisor * j] = 1; } } } int num_min, num_max; scanf("%d %d", &num_max, &num_min); for (divisor = 2; divisor <= n; divisor ){ if (mark[divisor] != 1 && divisor <= num_max && divisor >=num_min){ printf("%d\n",divisor); } } return 0; }

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页