当前位置: 首页 > news >正文

HDU 4048 Zhuge Liang's Stone Sentinel Maze [组合数学+Burnside]

  给出M个不同的数,每个数有无穷多个。从中选N个组成环,问最大公约数为1的方案有多少种。

  上一题是这题的基础,不同的是每个数可以选多个,tot[i]表示m个数中i的倍数有多少个,那么用构成长度为l最大公约数为i的倍数的方案有tot[i]^l种,之后再用容斥求一下最大公约数为1的方案即可。

  另外要考虑循环同构,套一个Burnside就行了,坑的就是N是10007倍数的情况,WA了N次。。要将MOD*n。。

  

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <algorithm>
 4 #define MAXN 20010
 5 int MOD;
 6 using namespace std;
 7 typedef long long LL;
 8 int cas, n, m, tx;
 9 int pri[MAXN], notp[MAXN], flag[MAXN], prs;
10 int tot[MAXN], maxm;
11 int fac[MAXN][305], facs[MAXN], phi[MAXN * 10];
12 void init(){
13     for (int i = 2; i < MAXN; i++) if (!notp[i]) {
14         flag[i] = 1;
15         for (int j = i*2; j < MAXN; j += i) {
16             if (!notp[j]) notp[j] = flag[j] = 1;
17             else if (flag[j]) flag[j]++;
18             if (j%(i*i) == 0) flag[j] = 0;
19         }
20     }
21     for (int i = 2; i < MAXN; i++)
22         if (!notp[i]) pri[prs++] = i;
23     for (int i = 1; i < MAXN; i++)
24         for (int j = 1; j * j <= i; j++) if (i % j == 0) {
25             fac[i][facs[i]++] = j;
26             if (j * j != i)fac[i][facs[i]++] = i/j;
27         }
28     const int maxn = 100000;
29     for (int i = 1; i <= maxn; i ++) phi[i] = i;
30     for (int i = 2; i <= maxn; i ++) if(phi[i] == i) {
31         for(int j = i; j <= maxn; j += i)
32             phi[j] = phi[j] / i * (i - 1);
33     }
34 }
35 int powmod(int x, int d){
36     int ans = 1, tmp = x;
37     for (; d; d >>= 1, tmp = (LL)tmp * tmp % MOD)
38         if (d&1) ans = (LL)ans * tmp % MOD;
39     return ans;
40 }
41 int cal(int l){
42     int ans = powmod(tot[1], l);
43     for (int i = 2; i <= maxm; i++) {
44         if (flag[i] == 0) continue;
45         if (flag[i] & 1) ans = (ans - powmod(tot[i], l)) % MOD;
46         else ans = (ans + powmod(tot[i], l)) % MOD;
47     }
48     return (ans % MOD + MOD) % MOD;
49 }
50 void solve(){
51     int ans = 0;
52     for(int i = 1; i * i <= n; i ++) if(n % i == 0) {
53         ans = (ans + (LL)cal(i) * phi[n / i]) % MOD;
54         if(i * i != n)
55             ans = (ans + (LL)cal(n / i) * phi[i]) % MOD;
56     }
57     printf("%d\n", (ans + MOD) % MOD / n);
58 }
59 int main(){
60     //freopen("test.in","r",stdin);
61     init();
62     scanf("%d", &cas);
63     while (cas--) {
64         scanf("%d%d", &m, &n);
65         MOD = 10007 * n;
66         memset(tot, 0, sizeof tot);
67         maxm = 0;
68         for (int i = 1; i <= m; i++) {
69             scanf("%d", &tx);
70             maxm = max(tx, maxm);
71             for (int j = 0; j < facs[tx]; j++)
72                 tot[fac[tx][j]]++;
73         }
74         solve();
75     }
76     return 0;
77 }

转载于:https://www.cnblogs.com/swm8023/archive/2012/10/31/2748708.html

相关文章:

  • swap file *.swp already exists问题解决!!!
  • [G-CS-MR.PS02] 機巧之形2: Ruler Circle
  • Eclipse开发环境配置,打磨Eclipse,安装插件(适用3.4,3.5,3.6,3.7)
  • 八、Maven下进行单元测试
  • Java反编译利器-Jad, Jode, Java Decompiler等及其IDE插件
  • 在阿里云创建子域名,配置nginx,使用pm2部署node项目到ubuntu服务器
  • 求数组中只出现一次的数字(算法)
  • 黄聪:公众号怎么用微信做出点击此处查看答案
  • 远程调用
  • Kinect+OpenNI学习笔记之12(简单手势所表示的数字的识别)
  • 超强大的响应式图表工具 (Echarts)
  • 4-8Expect实现批量主机公钥推送
  • 纯PHP Codeigniter(CI) ThinkPHP效率测试
  • Spring Cloud-Honghu Cloud分布式微服务云系统—技术点
  • 在Winform,Silvelight,WPF等程序中访问Asp.net MVC web api
  • “大数据应用场景”之隔壁老王(连载四)
  • 230. Kth Smallest Element in a BST
  • avalon2.2的VM生成过程
  • Centos6.8 使用rpm安装mysql5.7
  • javascript从右向左截取指定位数字符的3种方法
  • MySQL-事务管理(基础)
  • Quartz初级教程
  • Vue.js源码(2):初探List Rendering
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 项目管理碎碎念系列之一:干系人管理
  • 学习HTTP相关知识笔记
  • 用jquery写贪吃蛇
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • #FPGA(基础知识)
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (007)XHTML文档之标题——h1~h6
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (六)c52学习之旅-独立按键
  • (篇九)MySQL常用内置函数
  • (求助)用傲游上csdn博客时标签栏和网址栏一直显示袁萌 的头像
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • .net 4.0 A potentially dangerous Request.Form value was detected from the client 的解决方案
  • /*在DataTable中更新、删除数据*/
  • @SuppressWarnings注解
  • @vue/cli脚手架
  • []常用AT命令解释()
  • [2024] 十大免费电脑数据恢复软件——轻松恢复电脑上已删除文件
  • [ACM] hdu 1201 18岁生日
  • [Android] Android ActivityManager
  • [Bugku]密码???[writeup]
  • [C\C++]读入优化【技巧】
  • [GDMEC-无人机遥感研究小组]无人机遥感小组-000-数据集制备
  • [Go WebSocket] 多房间的聊天室(三)自动清理无人房间
  • [Grafana]ES数据源Alert告警发送
  • [Java、Android面试]_05_内存泄漏和内存溢出
  • [jQuery]div滚动条回到最底部