标题:[实践OK]用c语言的语法逻辑进行判断是不是质数的重构逻辑学习。 出处:向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除 时间:Thu, 14 Jan 2021 10:53:14 +0000 作者:jackxiang 地址:https://jackxiang.com/post/10827/ 内容: 质数定义:只有1和它本身两个约数,除此之外再没有其它约数。 示例1: #include #include int main() { int a; a=5; if(a%2!=0 && a%3 !=0 && a%4!=0) printf("质数"); else printf("合数"); } make zs cc zs.c -o zs #./zs 质数 示例2: #include #include int main() { int a,count; a=5; if(a%2==0) count++; if(a%3==0) count++; if(a%4==0) count++; if(count == 0) printf("质数"); else printf("合数"); } for循环介入: #cat zs.c #include #include int main() { int a,count,i; a=5; for(i=2;i<=4;i++){ if(a%i==0) count++; } if(count == 0) printf("质数"); else printf("合数"); } 引入scanf: #include #include int main() { int a,count,i; scanf("%d",&a); for(i=2;i<=a-1;i++){ if(a%i==0) count++; } if(count == 0) printf("质数"); else printf("合数"); } #./zs 5 质数 #./zs 6 合数 打印出约数: #include #include int main() { int a,count,i; scanf("%d",&a); for(i=2;i<=a-1;i++){ if(a%i==0){ count++; printf("%d ",i); } } if(count == 0) printf("质数"); else printf("合数"); } #./zs 5 质数 #./zs 6 2 3 合数 更快一点,引入break: #include #include int main() { int a,count,i; scanf("%d",&a); for(i=2;i<=a-1;i++){ if(a%i==0){ count++; break; } } if(count == 0) printf("质数"); else printf("合数"); } #./zs 6 合数 #./zs 1000 合数 任一大于2的偶数都可以写成两个质数之和,采用部分穷举法,可以从1-100,1-10000啥的,但无法穷举所有: #include #include int main() { int n,k,a,b,i,count1,count2; scanf("%d",&n);//4到n,如:4-n内的偶数都可以写成两个质数之和 for(k=4;k<=n;k=k+2){ for(a=2;a<=k/2;a++){ //判断a是否为质数 count1=0; for(i=2;i<=a-1;i++){ if(a%i==0){ count1++; break; } } if(count1==0){ //如果a为质数 b=k-a; //判断b是否为质数 count2=0; for(i=2;i<=b-1;i++){ if(b%i==0){ count2++; break; } } if(count2==0){ //如果b也是质数 printf("%d=%d+%d\n",k,a,b); break; } } } } } #./zs 100 4=2+2 6=3+3 8=3+5 10=3+7 12=5+7 14=3+11 16=3+13 18=5+13 20=3+17 22=3+19 24=5+19 26=3+23 28=5+23 30=7+23 32=3+29 34=3+31 36=5+31 ... Generated by Jackxiang's Bo-blog 2.1.1 Release