zoukankan      html  css  js  c++  java
  • UVa 11246

    题意大意:

    一个{1..n}的集合,求一个子集合,使得元素个数最多,并且不存在有两个元素x * k = y,求出最多的元素个数是多少.

    分析:

    先要删除k倍的,删除为{k, 2k, 3k, 4k, 5k, 6k...},会删掉多余的k^2,因此在加回k^2倍的数
    然后现在集合中会出现情况的只有k^2的倍数,因此对k^2倍的数字看成一个新集合反复做这个操作即可,因此最后答案为n - n / k + n / (k ^ 2) - n / (k ^ 3) + n / (k ^ 4)...

    #include<cstdio>
    using namespace std;
    int solve(int n,int k)
    {
    int ans=0,sign=1;
    while(n)
    {
    ans+=n*sign;
    n/=k;
    sign=-sign;
    }
    return ans;
    }
    int main()
    {
    int t,n,k;
    scanf("%d",&t);
    while(t--)
    {
    scanf("%d%d",&n,&k);
    printf("%d ",solve(n,k));
    }
    return 0;
    }

  • 相关阅读:
    经典小故事
    清晨六问
    ui相关书籍
    ui设计书籍推荐
    生成器
    函数之装饰器
    函数之闭包
    函数之作用域的查找顺序
    函数之命名空间/名字空间/名称空间
    内置函数
  • 原文地址:https://www.cnblogs.com/tsw123/p/4342314.html
Copyright © 2011-2022 走看看