下载后可任意编辑c 语言典型问题处理方法小结一、循环问题(1)、数论问题1、求素数 for(i=2;i<=a;i++) if(a%i==0) break; if (a==i) printf("yes\n"); elseprintf("no\n");素数概念:对于某个整数 a>1,假如它仅有平凡约数 1 和 a,则我们称 a 为素数(或质数)。整数 1 被称为基数,它既不是质数也不是合数。整数 0 和所有负整数既不是素数,也不是合数。 2、求最大公约数和最小公倍数a、 if(a>b) { t=a; a=b; b=t; } for(i=a;i>=1;i--) if(a%i==0&&b%i==0) break; printf("largest common divisor:%d\n",i); printf("least common multiple:%d\n",(a*b)/is);b、辗转相除法求解 a1=a; b1=b; while(a%b!=0) { t=a%b; a=b; b=t; } printf("largest common divisor:%d\nleast common multiple:%d",b,a1*b1/b);3、求完数 一个数假如恰好等于它的因子之和,这个数就称为“完数”。 例如:6 的因子为 1、2、3,而 6=1+2+3,因此 6 是“完数”。第一个 if 推断是否能被 2,3,4……直到本身整除。第二个 if 推断是否只能被本身整除。下载后可任意编辑for(a=1;a<=1000;a++) { s=0; for(i=1;i<=a;i++) if (a%i==0) { s+=i; if(s>=a) break; } if(s==a) printf("%d\t",a); }4、分解质因数 将一个整数写成几个质因数的连乘积,如: 输入 36,则程序输出36=2*2*3*3 。解一、main(){ int a,z,i; clrscr(); scanf("%d",&a); loop: for(z=2;z<=a;z++){for(i=2;i<=z;i++) if(z%i==0) break; if(z==i) if(a%z==0) { k++; if(k==1) printf("%d=%d",a1,z); else printf("*%d",z); a/=z; goto loop; }}}解二:main() { int n, k=2, isfirst=1; printf("Input n="); scanf("%d",&n);注意 S=0 所放的位置看似简单,但要自己完整地写出来还真不容易!!!竟然还动用了 goto 语句,正好可以熟悉一下 goto 语句的用法!!!推断是否为质数推断是否为 a 的质因数推断下一个数开始有要重新从 2开始了。所以用 loop 语句回到 for 语句,这是 for 语句仍从 2 初始化。从 2 开始的原则不变,变的是 a 的值。用计数器来解决每行输入不同的问题。下载后可任意编辑 while(k<=n) if(n%k==0) { if(isfirst) { printf("%d=%d", n, k); isfirst=0; } else printf("*%d",k); n/=k; } else k++; printf("\n");}5、从键盘输入两个整数...