#include<stdio.h> #include<math.h> #include<windows.h> //根据课程注释 void test1() { ?? ?int m, i, k; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? /*定义m为输入的一个整数,i为2最小的两个素数中较大的一个,k为m的平方根取整数部分*/ ?? ?printf("please enter a integer number:"); ?? ?scanf("%d", &m); ?? ?k = (int) sqrt(m); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? /*强制转换平方根结果为整型,丢弃小数部分*/ ?? ?for(i = 2; i < k; i++) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? /*FOR循环解决输入数与2至<=k取余*/ ?? ??? ?if(m % i == 0) break; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?/*m依次从2开始依次循环直至k取余数,无余数时截至,肯定不是素数*/ ?? ??? ?if(i > k) printf("%d is a prime number.\n", m); ? ? ? ? ?/*当k小于2,是质数*/ ?? ??? ?else printf("%d is not a prime number.\n", m); ? ? ? ? ? /*其它情况是素数*/ } //试修改 void test2() { ?? ?int m, i, k; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? /*定义m为输入的一个自然数,i为2最小的两个素数中较大的一个,k为m减去1(因为素数有它本身和1两个因数就不用计算了)*/ ?? ?printf("please enter a integer number:"); ?? ?scanf("%d", &m); ?? ?k = m - 1; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? /*根据素数确定FOR循环的次数*/ ?? ?for(i = 2; i <= k; i++) ? ?? ?{ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? /*FOR循环解决输入数与2至<=k取余*/ ?? ??? ?if(m % i == 0) break; ? ?? ?? ?} ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? /*m依次从2开始依次循环直至k取余数,无余数时截至,肯定不是素数*/ ?? ?if(i > k && k != -1) printf("%d is a prime number.\n", m); ? ? ? ? ?/*当k小于2但是不为0时,是质数*/ ?? ?else printf("%d is not a prime number.\n", m); ? ? ? ? ? /*其它情况是素数*/ }
修改为不规则整型:
?
#include<stdio.h> #include<math.h> #include<windows.h>
void test1() { ?? ?//采用不规则长整形输入输出素数 ?? ?unsigned long m, i, k; ?? ?printf("请输入一个正整数:"); ?? ?scanf_s("%lu", &m); ?? ? ?? ?k = (int)sqrt(m); ?? ?for(i = 2; i <= k; i++) ?? ??? ?if(m % k == 0) break; ?? ?if(i > k && m != 0) printf("%u是素数\n", m); ?? ?else printf("%u不是素数\n", m); }
void main() { ?? ?test1(); ?? ?system("pause"); }
?
void main() { ?? ?test1(); ?? ?test2(); ?? ?system("pause"); }
?
|