基础数学-4

快速幂与排序算法应用
本文探讨了快速幂算法的实现及其在特定场景中的应用,同时结合排序算法解决了一个复杂的问题。通过对数组进行操作和计算,实现了有效的解决方案。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5,mod=1000000007;
ll a[N+100];
ll quick_mod(ll a,ll b)(快速幂)
{
    ll ans=1;
    a%=mod;
    while(b)
    {
        if(b&1){ans=ans*a%mod;}
        a=a*a%mod;
        b>>=1;
    }
    return ans;
}
int main()
{
    int n,x;
    scanf("%d%d",&n,&x);
    ll s=0;
    for(int i=0;i<n;i++){scanf("%lld",&a[i]);s+=a[i];}
    for(int i=0;i<n;i++) a[i]=s-a[i];
    sort(a,a+n);a[n]=-1;
    int cn=1;ll c;
    for(int i=0;i<=n;i++)
    {
        if(a[i]==a[i+1])
        {
           cn++;
        }
        else
        {
            if(cn%x)
            {
                c=a[i];break;
            }
            else
            {
                cn/=x;
                a[i]+=1;
                i--;
            }
        }
    }
    c=min(c,s);
    printf("%lld\n",quick_mod(x,c));
    return 0;
}

Prime Number

#include<bits/stdc++.h> //想到解法
using namespace std;
typedef long long ll;
const int N=1e6;
char str[N+100];
int p[N+100],o;
int num[8]=
{
1869
,6891
,1896
,1689
,1986
,1968
,1698
};
void init()
{
    int a[4]={1,6,8,9};
    for(int i=0;i<4;i++)
     for(int j=0;j<4;j++)
      for(int u=0;u<4;u++)
       for(int v=0;v<4;v++)
         for(int c=0;c<=6;c++)
          {
                if(i!=j&&i!=u&&i!=v&&j!=u&&j!=v&&u!=v)
                {
                    int x=10000*c+1000*a[i]+100*a[j]+10*a[u]+a[v];
                    if(x%7==0) printf("%d\n",x);
                }
          }
}
int f(int *a,int len)
{
    int flag=1,flag1=1,flag6=1,flag8=1,flag9=1;
    int c=0;
    for(int i=len;i>=1;i--)
    {
        if(flag1&&a[i]==1) {flag1=0;continue;}
        if(flag6&&a[i]==6) {flag6=0;continue;}
        if(flag8&&a[i]==8) {flag8=0;continue;}
        if(flag9&&a[i]==9) {flag9=0;continue;}
         c=c*10+a[i];
         c%=7;
        if(a[i]==0&&flag){o++;}
        if(a[i]&&flag){flag=0;}
        if(flag==0) printf("%d",a[i]);
    }
    return c;
}
int main()
{
        scanf("%s",str);
        int len=strlen(str),s=0;
        for(int i=len,j=0;i>=1;i--,j++) {p[i]=str[j]-'0';s+=p[i];}
        if(len>4&&s==24)
        {
            printf("1869");
            for(int i=len-4;i>=1;i--) printf("0");
            printf("\n");return 0;
        }
        printf("%d",num[f(p,len)]);
        while(o--) printf("0");
        printf("\n");
        return 0;
}
Divisible by Seven

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值