• bnu oj 13288 Bi-shoe and Phi-shoe


    题目链接:

      http://www.bnuoj.com/contest/problem_show.php?pid=13288

    题目大意:

      给出一个n,然后给出n个幸运数([1,m]中不能被m整除的数的数目总和n,在[1,n]中的数称为m的幸运数),求原来的n个数的和最小是多少?

    解题思路:

      由素数的性质可以知道,素数的因子最少,所以每个幸运数的最小原数应该为素数,所以我们先把素数筛选出来,逐个比较就好啦。

    代码:

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <iostream>
     4 #include <algorithm>
     5 using namespace std;
     6 
     7 const int maxn = 1000005;
     8 const int N = 80000;
     9 
    10 int a[maxn], b[N];
    11 void isprim();
    12 int main ()
    13 {
    14     int t, n, m, l=1;
    15     memset (a, 0, sizeof(a));
    16     memset (b, 0, sizeof(b));
    17     isprim();
    18 
    19     scanf ("%d", &t);
    20     while (t --)
    21     {
    22         long long sum = 0;
    23         scanf ("%d", &n);
    24         while (n --)
    25         {
    26             scanf ("%d", &m);
    27             sum += b[a[m]];//因为在打素数表时候已经记录,所以就不用再循环寻找
    28         }
    29         printf ("Case %d: %lld Xukha
    ", l++, sum);
    30     }
    31     return 0;
    32 }
    33 
    34 void isprim()//筛选素数
    35 {
    36     int i, j = 0, k;
    37     for (i=2; i<maxn; i++)
    38         if (!a[i])
    39         {
    40             b[j++] = i;//抄出素数
    41             for (k=i; k<maxn; k+=i)
    42                 a[k] = j;
    43         }
    44     j = 0;
    45     for (i=2; i<maxn; i++)
    46     {
    47         if (j < a[i])
    48             j = a[i];
    49         a[i] = j;//距离i最近的素数是第j个素数
    50     }
    51 }

      

    本文为博主原创文章,未经博主允许不得转载。
  • 相关阅读:
    Keyboarding题解
    埃及分数 解题报告
    小木棍加强版解题报告
    扩展欧几里得
    luoguP4999 烦人的数学作业
    中国剩余定理
    20201115gryz模拟赛解题报告
    扩展欧几里得算法
    斐蜀定理
    CSP2020-S游记
  • 原文地址:https://www.cnblogs.com/alihenaixiao/p/4442404.html
Copyright © 2020-2023  润新知