zoukankan      html  css  js  c++  java
  • 签到

    1 HDU 6069 Counting Divisors

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <cstdlib>
     5 #include <algorithm>
     6 #include <queue>
     7 #include <vector>
     8 #include <stack>
     9 #include <map>
    10 #include <set>
    11 #include <cmath>
    12 #include <cctype>
    13 #include <ctime>
    14 
    15 using namespace std;
    16 
    17 #define REP(i, n) for (int i = 0; i < (n); ++i)
    18 #define eps 1e-9
    19 
    20 typedef long long ll;
    21 typedef pair<int, int> pii;
    22 
    23 const int INF = 0x7fffffff;
    24 const int maxn = 1.1e6;
    25 const ll mod = 998244353;
    26 int T, k, prime_cnt = 0, cnt;
    27 ll l, r, ans;
    28 int prime[maxn];
    29 bool vis[maxn];
    30 ll ans_t[maxn], a[maxn];
    31 
    32 void init() {
    33     for (int i = 2; i < maxn; ++i) {
    34         if (!vis[i]) {
    35             prime[prime_cnt++] = i;
    36             for (int j = i; j < maxn; j += i) { vis[j] = true; }
    37         }
    38     }
    39 }
    40 void cal(int x) {
    41     ll l_t, t; t = l / prime[x];
    42     if (t * prime[x] == l) { l_t = l; } else { l_t = (t + 1) * prime[x]; }
    43     if (l_t > r) { return; }
    44 //    printf("prime = %d, l_t = %I64d
    ", prime[x], l_t);
    45     for (ll i = l_t - l; i <= r - l; i += prime[x]) {
    46         cnt = 1; a[i] /= prime[x];
    47         while (a[i] % prime[x] == 0) { a[i] /= prime[x]; ++cnt; }
    48         ans_t[i] *= 1ll * cnt * k + 1; ans_t[i] %= mod;
    49     }
    50 }
    51 
    52 int main() {
    53 #ifdef __AiR_H
    54     freopen("in.txt", "r", stdin);
    55 //    freopen("out.txt", "w", stdout);
    56 #endif // __AiR_H
    57     scanf("%d", &T); init();
    58     while (T--) {
    59         scanf("%I64d %I64d %d", &l, &r, &k); ans = 0;
    60         for (ll i = 0; i <= r - l; ++i) { a[i] = l + i; ans_t[i] = 1; }
    61         for (int i = 0; i < prime_cnt; ++i) { cal(i); }
    62         for (ll i = 0; i <= r - l; ++i) {
    63             if (a[i] != 1) { ans_t[i] *= k + 1; ans_t[i] %= mod; }
    64         }
    65 //        for (int i = 0; i <= r - l; ++i) {
    66 //            printf("i = %d %I64d
    ", i, ans_t[i]);
    67 //        }
    68 //        printf("
    ");
    69         for (int i = 0; i <= r - l; ++i) { ans = (ans + ans_t[i]) % mod; }
    70         printf("%I64d
    ", ans);
    71     }
    72 #ifdef __AiR_H
    73     printf("Time used = %.2fs
    ", (double)clock() / CLOCKS_PER_SEC);
    74 #endif // __AiR_H
    75     return 0;
    76 }
    View Code
  • 相关阅读:
    量子纠错码——Stabilizer codes
    量子计算机编程(三)——量子应用
    量子计算机编程(二)——QPU基础函数
    量子计算机编程(一)——QPU编程
    量子搜索算法 Grover search
    因数分解算法、周期查找算法(简化)
    量子傅里叶变换
    简单的量子算法(二):Simon's Algorithm
    简单的量子算法(一):Hadamard 变换、Parity Problem
    Web Scraper——轻量数据爬取利器
  • 原文地址:https://www.cnblogs.com/zhaoyz/p/7281617.html
Copyright © 2011-2022 走看看