素数判断&&求m内能被3整除的所有数之和
来源:互联网 发布:值乎app 编辑:程序博客网 时间:2024/05/16 14:14
item 1:输入一个正整数,判断其是否为素数并输出
代码
/**Copyright @2017,CSDN学院*All rights reserved.*文件名称:main.c*作 者:袁生*完成日期:2017年10月24日*版 本 号:v1.0*问题描述:输入一个正整数,判断它是不是素数并输出*/#include <stdio.h>#include<math.h>int main(){ unsigned int m,i,k; printf("请输入正整数m:"); scanf("%d",&m); k=sqrt(m); if(m==0||m==1) printf("%d 既不是素数也不是合数",m); else { if(m==k*k) printf("%d 不是素数",m); else { for(i=2;i<k;i++) if(m%i==0)break; if(i>k) printf("%d 是素数",m); else printf("%d 不是素数",m); } } return 0;}
心得
先排除特殊情况(m=0或m=1),再进行系统分析是必要的。此外,优先排除平方数可以提高运算效率,所以在循环之前加了个if(m==k*k)语句。最后在循环条件i<k还是i≤k时斟酌是否要等号,经分析觉得没所谓,因为经验证break执行后直接跳出循环,i++最后一次不会执行,故等号不影响i>k的结果(但如果循环后的if(i>k)变为if(i>=k)且没有循环语句前的平方数排除判断if(m=k*k)的话,if(i>=k)会在m为平方数时有效从而改变结果);下面看一个程式
void main(){ int m,i,k;printf("please input a number:\n");scanf("%d",&m);k=sqrt(m);for(i=2;i<k;i++)if(m%i==0) break;if(i>=k)printf("该数是素数");elseprintf("该数不是素数");}当m=0,1,4时,该程序输出结果为“该数是素数”,明显不对,应该更周全些,除了像第一个程序排除特殊情况m=0,1外,还要警惕平方数如9(3²),按示例也会输出“该数是素数”的错误结果,所以循环后的if语句判断条件还要去掉等号变为if(i>k)。写循环语句时要注意循环条件中等号的选择,有时候多一个等号就会导致错误的结果,还要随时注意特殊情况的存在,谨记!!!
item 2:输入一个正整数m,求[1,m]区间内所有能被3整除的数之和并输出和。
代码
/**Copyright @2017,CSDN学院*All rights reserved.*文件名称:main.c*作 者:袁生*完成日期:2017年10月24日*版 本 号:v1.0*问题描述:输入一个正整数m,求[1,m]内能被3整除的所有数之和输出*/#include <stdio.h>#include<math.h>int main(){ unsigned int m,i,sum=0; printf("请输入正整数m:"); scanf("%d",&m); //方法一: /*for(i=3;i<=m;i++) { if(i%3==0) sum+=i; }*/ //方法二: sum=(3+(m/3)*3)*(m/3)/2; printf("[1,m]内能被3整除的所有数之和为:%d",sum); return 0;}心得
这题目很简单,关键是打破常规思维的方法二,通常情况下我们思路都是从3开始找能被3整除的数一直找到m,也就是方法一,但方法二另辟蹊径,想到满足条件的数会构成等差数列,利用高斯的求和公式可以计算,于是找到这些数构成的等差数列的首项3,尾项m/3*3(注意这个结果不一定是m,m/3是取整的,如果m不是3的倍数m/3将取整数部分),项数m/3(同样这个也是取整),根据高斯求和公式可以一步到位求所有[1,m]内能被3整除的数之和。
阅读全文
0 0
- 素数判断&&求m内能被3整除的所有数之和
- html输出1000内能够被3整除的数
- 求1-100内能被3整除,不能被5整除的数字。
- 1000~2000内能被17和37整除的数
- 1000-2000内能被17和37整除的数
- 求1~100能被7整除的数之和
- 求1~100之间不能被3整除的数之和,还有统计1~100不能被整除的个数
- 输出所有1到N之中能被3整除的数之和
- C-新手看的求1-100之间能被3整除的数之和
- 2.求1~100之间不能被3整除的数之和
- 求任意数以内所有可以表示为连续素数之和的素数。
- 求两个数之间的素数+一个数的各位之和+判断回文数
- 1到n之间能被m整除的数之和
- 114.按要求,求小于n同时能被3和7整除的所有自然数之和的平方根
- 1到n范围内能被5或6或8整除的数的个数
- 求所有位数之和能被另一个数整除的序列
- vb输出1000到2000内能同时被17和37整除的数
- 1000~2000内能被17与37同时整除的数
- beam问题
- tensorflow(0)-入门
- day33
- 4033: [HAOI2015]树上染色
- android的四种启动方式
- 素数判断&&求m内能被3整除的所有数之和
- VS2013 CAFFE CUDNNV6 CUDA V8.0配置
- 区间DP心得及例题
- [组合] Codeforces #571A. Lengthening Sticks
- 代码开光
- 二次整数分解
- shell中流程的控制
- opencv基础函数汇总
- 创建继承类Person的类Student