对前一周的总结(11月20至11月27日)

本周简单的学习了2个方法(辗转相除法)和(牛顿迭代法)

这2个方法用处比较局限,只能解决固定类型题。

问题1(辗转相除法)

判断两个整数m和n是否互质(即是否有公共的因子)(m≠1,n≠1)。方法是: 用2到t(t取m和n中较小的那个数)之间的数分别去除m和n,若m和n能同时被某个数除尽,则m和n不互质;否则它们互质。

    例如,若输入187和85,则应输出No(表示它们不互质,它们有公因子17)。若输入89和187,则应输出Yes(表示它们互质)。

分析

先介绍一下辗转相除法:
即m 和 n求最大公因数(假设m大于n),先用 m 除以 n ,如果余数 r 为 0 ,则 n 就是最大公因数,否则,将 n 给了 m ,将 r 给了 n ,再用 m 除以 n ,如果余数 r 为 0 ,则n为最大公因数,否则重复执行上述操作,直至 r 为 0 ,此时的 n 就是 m 和 n 的最大公因数。

如m=72,n=48 .m%n=24;然后m=n=48;n=该余数24,48%24=0;所以最大公因数就是n=24.

#include<stdio.h>

int fun(int m,int n)

{

    int t;

    while(t=m%n)

    {

        m=n;

        n=t;

    }

    return n;

}

int main()

{

    int m,n;

    scanf("%d %d",&m,&n);

    int t;

    t=fun(m,n);

    if(t==1)

        printf("yes");//互质则t=1;

    else printf("no");//不互质则t!=1;

    return 0;

}

总结:极大的减少了代码思路,一开始我想的循环,然后了解该方法后发现甚妙!

问题 2

用牛顿迭代法求根。方程为,系数a,b,c,d的值由主函数输入,分别为1,2,3,4。求x在1附近的一个实根。求出根后由主函数输出。

分析

一开始非常迷茫,不知道如何下手,如何去了解了一下牛顿迭代法,刹时豁然开朗。

这里介绍一下(牛顿迭代法)

牛顿迭代法是取x0之后,在这个基础上,找到比x更接近方程的根,一步一步迭代,从而找到更接近方程根的近似跟。具体思路看数学求根。公式为x=x0-f(x0)/f'(x0).迭代到|x-x0|<=要求即可

#include<stdio.h>
#include<math.h>

float solut(int a, int b, int c, int d)
{
float x = 1, x0, f, f1;
do
{
x0 = x;
f = ((a * x0 + b) * x0 + c) * x0 + d;
f1 = (3 * a * x0 + 2 * b) * x0 + c;
x = x0 - f / f1;
} while (fabs(x - x0) >= 1e-3);
return(x);
}

int main()
{
int a, b, c, d;
printf("input a,b,c,d:");
scanf("%d %d %d %d", &a, &b, &c, &d);
printf("x=%10.7f\n", solut(a, b, c, d));
return 0;
}

总结

一种方法需要掌握,但是用处局限。这里用了fabs()绝对值,所以头文件要加math。这题主要还是公式的掌握,比较死板。

反思

自己掌握的方法太少了,下一周要多多学习方法!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值