• 牛客寒假算法基础集训营1 D 小a与黄金街道


      小a与黄金街道

     

    链接:https://ac.nowcoder.com/acm/contest/317/D

    题解:

    附上欧拉函数模板:  

    (1)直接求小于或等于n,且与n互质的个数:

      int Euler(int n)

    {

        int ret=n;

        for(int i=2;i<=sqrt(n);i++)

         if(n%i==0)

          {

            ret=ret/i*(i-1);//先进行除法防止溢出(ret=ret*(1-1/p(i)))

            while(n%i==0)

              n/=i;

         }

        if(n>1)

              ret=ret/n*(n-1);

            return ret;

    }

    筛选模板:求[1,n]之间每个数的质因数的个数

    #define size 1000001

    int euler[size];

    void Init()

    {   memset(euler,0,sizeof(euler));

              euler[1]=1;

        for(int i=2;i<size;i++)

           if(!euler[i])

           for(int j=i;j<size;j+=i)

           {

                  if(!euler[j])

                   euler[j]=j;

                   euler[j]=euler[j]/i*(i-1);//先进行除法是为了防止中间数据的溢出

             }

    }

     1 import java.util.Scanner;
     2 
     3 public class Main{
     4     static int maxn = 100010;
     5     static int [] euler = new int[maxn];
     6     /*static void init() {
     7         euler[1] = 1;
     8         for(int i=2;i<maxn;i++) {
     9             if(euler[i]==0) {
    10                 for(int j=i;j<maxn;j+=i) {
    11                     if(euler[j]==0) {
    12                         euler[j] = j;
    13                     }
    14                     euler[j] = euler[j]/i*(i-1);
    15                 }
    16             }
    17         }
    18     }*/
    19     static long init(long x) {
    20         long ret = x;
    21         for(int i=2;i*i<=x;i++) {
    22             if(x%i==0) {
    23                 ret = ret/i*(i-1);
    24                 while(x%i==0) {
    25                     x/=i;
    26                 }
    27             }            
    28         }
    29         if(x>1)
    30             ret = ret/x*(x-1);
    31         return ret;
    32     }
    33     static long powmod(long a,long b,long mo) {
    34         long ans = 1;
    35         while(b!=0) {
    36             if((b&1)==1) {
    37                 ans = (ans*a)%mo;
    38             }
    39             a = (a*a)%mo;
    40             b>>=1;
    41         }
    42         return ans;
    43     }
    44     public static void main(String[] args) {
    45         Scanner cin = new Scanner(System.in);
    46         int n,k;
    47         long A,B;
    48         n = cin.nextInt();
    49         k = cin.nextInt();
    50         A = cin.nextLong();
    51         B = cin.nextLong();
    52         long ans = (A+B)*powmod(k, init(n)/2*n, 1000000007)%1000000007;
    53         System.out.println(ans);
    54     }    
    55 }
  • 相关阅读:
    flex 自定义事件
    ssis 不停执行的方法
    动态修改大小的Panel用户控件
    ssis 写文件到数据库
    sqlserver CheckSum
    poj1423
    poj1860
    poj1862
    poj1426
    poj1234
  • 原文地址:https://www.cnblogs.com/1013star/p/10310725.html
Copyright © 2020-2023  润新知