先来看两道题题1


题2


  1. 这里就不能直接算了
  2. 没有任何数据可以储存
  3. 所以我们需要定义一个算法

发现一篇文章还挺好的

对于上面的题有这些算法:

思路: (a b c) % n = ( ( ( a % n ) b % n ) c )%n

题1,算法1

#include<stdio.h>
int main()
{
    int a,b;
    scanf("%d%d",&a,&b);
    int x=1;
    for(int i=1;i<=b;i++){
        x*=a;
        x=x%7;
    }
    printf("%d",x);
    return 0;
}

题1,算法2

#include<stdio.h>
int main()
{
    int a=3,b=2000,ans=1,m=7;
    while(b>0)
    {
        if(b&1)
        {
            ans=ans*a%m;
        }
        a=a*a%m;
        b>>=1;
    }
    printf("%d",ans);
    return 0;
}


题2,算法1

思路就是余1000就剩下三位数了。

#include<stdio.h>
int main()
{
    int a,b;
    scanf("%d%d",&a,&b);
    int x=1;
    for(int i=1;i<=b;i++){
        x*=a;
        x=x%1000;
    }
    printf("%03d",x);
    return 0;
}


题2,算法2(一个大佬写的,看不懂)

#include<iostream>
using namespace std;
int main()
{
    int a,b,k=1,i;
    cin>>a>>b;
    for(i=1;i<=b;i++)
    {
        k*=a;
        k%=1000;//k储存a^i的后三位 
    }
    if(k>=0)
    cout<<k<<endl;
    else if(k>=10)
        cout<<"0"<<k<<endl;//处理结果不为后3位的情况
         else
         cout<<"00"<<k<<endl;
         return 0;

}

这个现在还看不懂

cin就是scanf,cout,就是printf


举例

#include<bits/stdc++.h>
using namespace std;
typedef long int ll;
int main()
{
  ll m,n,k;
  cin>>m>>n>>k;
  ll res=1%k;
  while(n)
  {
    if(n&1) res=res*m%k;
    m=m*m%k;
    n>>=1;
  //  cout<<res<<endl;
  }
  cout<<res<<endl;
}

最后修改:2020 年 10 月 29 日
如果觉得我的文章对你有用,请随意赞赏