zoukankan      html  css  js  c++  java
  • hdu 1695 GCD(容斥)

    题目链接

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 typedef long long ll;
     4 inline int read()
     5 {
     6     int x=0,f=1;char ch=getchar();
     7     while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
     8     while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
     9     return x*f;
    10 }
    11 
    12 /********************************************************************/
    13 
    14 const int maxn = 1e5+7;
    15 vector<int> pri[maxn];
    16 
    17 //分解成的质数
    18 void init(){
    19     for(int i = 2;i < maxn; i++){
    20         int now = i;
    21         for(int j = 2;j*j <= now;j++){
    22             if(now%j == 0){
    23                 pri[i].push_back(j);
    24                 while(now%j == 0) now /= j;
    25             }
    26             if(now == 1) break;
    27         }
    28         if(now > 1)
    29             pri[i].push_back(now);
    30     }
    31 }
    32 
    33 int solve(int x, int pos){
    34     int res = 0;
    35     for(int i = 1;i < (1 << pri[x].size());i++){
    36         int num = 0;
    37         int tmp = 1;
    38         for(int j = 0;j < pri[x].size();j++){
    39             if((i >> j)& 1){
    40                 num++;
    41                 tmp *= pri[x][j];
    42             }
    43         }
    44         if(num & 1) res += pos/tmp;
    45         else res -= pos/tmp;
    46     }
    47     return pos - res;
    48 }
    49 
    50 int main(){
    51     init();
    52     int t;
    53     t = read();
    54     for(int i = 1;i <= t;i++){
    55         int a, b, c, d, k;
    56         //a = 1, d = 1;
    57         a = read(); b = read(); c = read(); d = read(); k = read();
    58         if(k == 0){
    59             printf("Case %d: 0
    ", i);
    60             continue;
    61         }
    62         b /= k, d /= k;
    63         if(b < d) swap(b, d);
    64         ll ans = 0;
    65         for(int j = 1;j <= b;j++){
    66             ans += solve(j, min(j, d));
    67         }
    68         printf("Case %d: %lld
    ", i, ans);
    69     }
    70     return 0;
    71 }
  • 相关阅读:
    Django 前戏
    SQL基本语句
    如何正确安装Mysql
    JQuery
    解疑答惑—解决脱离标准文档流(恶心的浮动)
    事件
    卷基于快照进行恢复
    centos7下Firewall使用详解
    基于镜像卷启动的虚机快照代码分析
    nova卸载volume源码分析
  • 原文地址:https://www.cnblogs.com/ouyang_wsgwz/p/9636931.html
Copyright © 2011-2022 走看看