zoukankan      html  css  js  c++  java
  • HDU5942 Just a Math Problem

    这个题关键问题是转化2的f(i) 的值变为将i的质因子分组的问题。

    以后遇到2的幂次需要往这方面考虑。

     1 #include <bits/stdc++.h>
     2 const long long mod = 1e9+7;
     3 const double ex = 1e-10;
     4 #define inf 0x3f3f3f3f
     5 using namespace std;
     6 long long not_prim[1000050],prim[1000050];
     7 vector <int> x[1000011];
     8 long long mu[1000050],tot;
     9 void getmu(long long n){
    10     not_prim[0] = not_prim[1] = 1;
    11     mu[1] = 1;
    12     for (long long i = 2 ; i<= n; i++){
    13         if (!not_prim[i]){
    14             mu[i] = -1;
    15             prim[++tot] = i;
    16         }
    17         for (long long j = 1; j <= tot && prim[j]*i <= n ; j++){
    18             not_prim[prim[j]*i] = i;
    19             if (i % prim[j] == 0){
    20                 mu[prim[j]*i] = 0;
    21                 break;
    22             }
    23             mu[prim[j]*i] =-mu[i];
    24         }
    25     }
    26     for (int i = 1 ; i <= n ;i++){
    27         for (int j = i ; j <= n; j+=i)
    28             x[j].push_back(i);
    29     }
    30 }
    31 long long dp[1000011];
    32 inline long long solve(long long n, long long m){
    33     if (m==n && dp[n]!=0) return dp[n];
    34     long long ans = 0;
    35     int num = x[m].size();
    36     for (int i = 0; i<num ;i++){
    37         ans =( ans + ( mu[x[m][i]]*(n/x[m][i]) % mod) + mod ) % mod;
    38     }
    39     if (m==n) dp[n] = ans;
    40     return ans;
    41 }
    42 int main()
    43 {
    44     int T;
    45     getmu(1000000);
    46     cin >> T;
    47     int cas = 1;
    48     while (T--){
    49         long long N;
    50         cin >> N;
    51         long long ans = 0;
    52         for (long long  i = 1 ; i*i <= N ;i++){
    53             ans = (ans + solve(N/i,i) - solve(i,i) + mod ) % mod;
    54         }
    55         ans = (ans * 2 + 1 ) % mod;
    56         printf("Case #%d: %lld
    ",cas++,ans);
    57     }
    58     return 0;
    59 }
  • 相关阅读:
    NOIP201105铺地毯
    50148155HYF旅游
    连通性判断
    传递消息1
    找朋友
    5796: 最短Hamilton路径(状压dp)
    2283: A Mini Locomotive(01背包)
    2616: Cow Frisbee Team(01背包)
    2593: Secret Message(字典树)
    Stammering Aliens(二分+Hash 卡过)
  • 原文地址:https://www.cnblogs.com/HITLJR/p/7598807.html
Copyright © 2011-2022 走看看