平方根

PHP筛选法求素数

心已入冬 提交于 2020-03-25 12:03:06
首先,素数是只能被自己和1整除的正整数,特别指出的是我们规定1不是素数。 分析: 首先判断一个数是不是素数: 我们这样做的,用选定的这个数除以小于当前这个数的平方根的所有的数,如果有一个能整除,则不是素数,否则素数。这里的关键是为何只用是平方根就行呢? 是这样的,不难发现,当一个数等于两个数的乘积时,那么这两个数中必然有一个要小于这个数的平方根,另外一个数肯定大于这个数的平方根,也就说当我们发现当前数能被比他平 方根小的数整除,就不用去整除另一个比他平方根大的数,减少循环次数,让算法更简洁。 方法一:普通方法 代码实现: <?php function sushu($n) { for($j=2;$j<=$n;++$j){ for($i=2,$sqrt=sqrt($j);$i<=$sqrt;++$i){ //只用判定当前数的平方根 if($j%$i==0){ continue 2; //如果不是素数,则跳出内层循环,从外层循环继续执行 } } echo $j; echo "<br>"; } } sushu(100); //100以内的素数 ?> 方法二:利用筛选法求素数 分析:何为筛选法呢?是这样的,首先我们把1标识成素数,把0标识成非素数,假设给出的N个数都是素数,标识为1 从第一个数开始筛选,遇到当前这个数的倍数就把他的倍数标识改为0,标识完后再进入第二个数重复第一个数的操作

平方根计算

我的未来我决定 提交于 2020-03-17 11:06:28
二分法 描述:假设数据是按升序排序的,对于给定值x,从序列的中间位置开始比较,如果当前位置值等于x,则查找成功;若x小于当前位置值,则在数列的前半段中查找;若x大于当前位置值则在数列的后半段中继续查找,直到找到为止。 简单介绍:在有序的有N个元素的数组中查找用户输进去的数据x。 算法如下: 确定查找范围front=0,end=N-1,计算中项mid(front+end)/2。若a[mid]=x或front>=end,则结束查找;否则,向下继续。若a[mid]<x,说明待查找的元素值只可能在比中项元素大的范围内,则把mid+1的值赋给front,并重新计算中项mid,继续执行步骤2;若a[mid]>x,说明待查找的元素值只可能在比中项元素小的范围内,则把mid-1的值赋给end,并重新计算mid,继续执行步骤2。 以求解2的平方根的程序为基础,编程实现:输入一个浮点数,计算其平方根。要求如下: 不准使用如sqrt()的库函数代码必须上传并确保自己测试通过输入一个浮点数输出该浮点数的平方根 提示: 测试输出与标准测试结果不符的一种可能原因是计算精度不够,简单的解决方法是将循环计算的次数提高,如将20次提高到30次。 一定要考虑到根大于0的情况,而不是求根号2那样利用1.0这个下限。 测试说明测试输入:2 预期输出:1.41421 # include <iostream> using

C# Math类简介

こ雲淡風輕ζ 提交于 2020-03-10 23:21:24
Math.abs() 计算绝对值。 Math.acos() 计算反余弦值。 Math.asin() 计算反正弦值。 Math.atan() 计算反正切值。 Math.atan2() 计算从x 坐标轴到点的角度。 Math.ceil() 将数字向上舍入为最接近的整数。 Math.cos() 计算余弦值。 Math.exp() 计算指数值。 Math.floor() 将数字向下舍入为最接近的整数。 Math.log() 计算自然对数。 Math.max() 返回两个整数中较大的一个。 Math.min() 返回两个整数中较小的一个。 Math.pow() 计算x 的y 次方。 Math.random() 返回一个0.0 与1.0 之间的伪随机数。 Math.round() 四舍五入为最接近的整数。 Math.sin() 计算正弦值。 Math.sqrt() 计算平方根。 Math.tan() 计算正切值。 Math.E 欧拉(Euler) 常数,自然对数的底(大约为2.718)。 Math.LN2 2 的自然对数(大约为0.693)。 Math.LOG2E e 的以2 为底的对数(大约为1.442)。 Math.LN2 10 的自然对数(大约为2.302)。 Math.LOG10E e 的以10 为底的对数(大约为0.434)。 Math.PI 一个圆的周长与其直径的比值(大约为3

平方根格式化

ε祈祈猫儿з 提交于 2020-03-07 19:19:35
描述 获得用户输入的一个整数a,计算a的平方根,保留小数点后3位,并打印输出。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬ 输出结果采用宽度30个字符、右对齐输出、多余字符采用加号(+)填充。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬ 如果结果超过30个字符,则以结果宽度为准。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬ ‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬ 输入输出示例 输入 示例 1 10 输出 +++++++++++++++++++++++++3.162 代码 num = int(input()) result = pow(num, 0.5) print("{:+>30.3f}"

74_迭代法求平方根

旧时模样 提交于 2020-02-17 15:18:27
#include<iostream> #include<stdio.h> #include<math.h> using namespace std; int main(){ double a[100]={0}; double x; cin>>x; a[0]=x; int i=1; while((a[i]-a[i-1])<0.00001){ a[i]=0.5*(a[i-1]+x/a[i-1]); i++; } printf("%.3lf",a[i-1]); } 来源: CSDN 作者: 徐文小涛涛 链接: https://blog.csdn.net/qq_41440031/article/details/104356971

【LeetCode】69. x 的平方根(JAVA)

不羁的心 提交于 2020-02-10 15:56:27
原题地址: https://leetcode-cn.com/problems/sqrtx/ 题目描述: 实现 int sqrt(int x) 函数。 计算并返回 x 的平方根,其中 x 是非负整数。 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。 示例 1: 输入: 4 输出: 2 示例 2: 输入: 8 输出: 2 说明: 8 的平方根是 2.82842…, 由于返回类型是整数,小数部分将被舍去。 解题方案: 参考: https://leetcode-cn.com/problems/sqrtx/solution/er-fen-cha-zhao-niu-dun-fa-python-dai-ma-by-liweiw/ 采用二分法的变形,上界选择x/2 +1是因为对于大部分x, x < x 2 \sqrt{x}<\dfrac{x}{2} x ​ < 2 x ​ ,例外只有0,1,2,3,而这三个数也满足 x < x 2 + 1 \sqrt{x}<\dfrac{x}{2}+1 x ​ < 2 x ​ + 1 。mid需要选择右中值是为了防止只有两个元素时陷入死循环。 代码: class Solution { public int mySqrt ( int x ) { long left = 0 , right = x / 2 + 1 , mid ; while ( left

牛顿迭代法求平方根

懵懂的女人 提交于 2020-02-07 21:53:47
public static double sqrt(double c) { if(c<0) return -1; double err = 1e-15; double t = c; while(Math.abs(t-c/t)>err*t) t=(t+c/t)/2.0; return t } 原理解释: 先假设t为c的平方根,x1=t,再利用公式x(n)=(x(n-1)+c/x(n-1))/2,然后不断迭代求x(n)的值,直到x(n+1)-x(n)的差值小于err为止。 比如求6的平方根,此时t=c=6,x1=6,运用公式迭代求得x2=3.5,x3=4.35,x4=2.86,...x(n)=2.45 来源: CSDN 作者: qq_36669347 链接: https://blog.csdn.net/qq_36669347/article/details/104214076

x的平方根(牛顿迭代法)

倾然丶 夕夏残阳落幕 提交于 2020-02-04 12:02:45
实现 int sqrt(int x) 函数。 计算并返回 x 的平方根,其中 x 是非负整数。 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。 示例 1: 输入: 4 输出: 2 示例 2: 输入: 8 输出: 2 说明: 8 的平方根是 2.82842…, 由于返回类型是整数,小数部分将被舍去。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/sqrtx 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 牛顿迭代法: Γ ( x 2 ) = 0 \Gamma(x^2)=0 Γ ( x 2 ) = 0 f ( x ) = x 2 − n f(x)=x^2-n f ( x ) = x 2 − n 求斜率: 2 x 2x 2 x x − ( x 2 − n ) / 2 x = x / 2 + n / 2 x x-(x^2-n)/2x=x/2+n/2x x − ( x 2 − n ) / 2 x = x / 2 + n / 2 x x n + 1 = x n / 2 + n / 2 x n x_{n+1}=x_{n}/2+n/2x_n x n + 1 ​ = x n ​ / 2 + n / 2 x n ​ 最后进行迭代; 递归解决: class Solution { public : int

ACM寒假集训——因子求和

二次信任 提交于 2020-01-22 09:11:53
题目描述 已知一个正整数N(20 <= N <= 800000000),请你编写程序求出该数的全部因子(不包括1)的和。 输入 N 输出 一个整数(因子和) 样例输入 复制 24 样例输出 复制 35 提示 24的因子有: 2、3、4、6、8、12,其和为 35 题目思路:本题直接用for循环到n的话会超时,所以就需要对n求平方根。平方根内有n的因子的话,平方根外肯定有对应的因子。并且在判断平方根的时候,要判断平方根是不是整数,如果是整数的话则此时的平方根只需要加一次就可。 ac代码: #include<stdio.h> #include<math.h> int main() { long long int n,sum=0; double a; scanf("%lld",&n); a=sqrt(n); int temp=a; if(temp*temp n) { for(int i=2;i<=sqrt(n);i++) { if(n%i 0&&i!=sqrt(n)) { sum+=i+(n/i); } if(i==sqrt(n)) { sum+=i; } } } else { for(int i=2;i<=sqrt(n);i++) { if(n%i==0&&i!=sqrt(n)) { sum+=i+(n/i); } } } printf("%d",sum); return 0; }

【力扣】69. x 的平方根

谁都会走 提交于 2020-01-19 01:18:29
题目 :实现 int sqrt(int x) 函数。 计算并返回 x 的平方根,其中 x 是非负整数。 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。 示例 1: 输入: 4 输出: 2 示例 2: 输入: 8 输出: 2 说明: 8 的平方根是 2.82842…, 由于返回类型是整数,小数部分将被舍去。 class Solution { public int mySqrt ( int x ) { return x = ( int ) Math . sqrt ( x ) ; } } 来源: CSDN 作者: 漆黑丶 链接: https://blog.csdn.net/weixin_44485744/article/details/103816275