poj 3904 求四元互质集合
从给定的集合中求互质四元组的个数。
解题思路:先求解非互质四元组的个数,在总体四元组个数减去这个数目。求非互质四元组即求公因数大于1的四元组数目,因此,使用公因数d把集合中的元素划分成不同的子集,每个子集中的四元组一定是非互质的。还有一点需要考虑的是,不同子集中可能蕴含相同的非互质四元组。可以使用容斥原理解决这个问题,具体的方法是对公因数d进行质因数分解,若d可以分解成奇数个质数,就在非互质四元组总数中加上公因数d对应的非互质四元组,若为偶数则减去。
#include<iostream>
#include<string.h>
#include<stdio.h>
using namespace std;int cnt[10010]; //记录每个因数对应子集的元素数
int num[10010]; //记录每个因数分解的不同质因数个数
int prime[5]; //记录一个数字对应的质因数(10000以内最多有五个不同质因数)
long long p[10010]={0}; //记录组合数void solve(int n)
{int tol=0;for(int i=2;i*i<=n;i++) //求输入数字的质因数,方法很好{if(n%i==0)prime[tol++]=i;while(n%i==0)n=n/i;}if(n!=1) //对应输入的数字本身就是质数prime[tol++]=n;for(int i=1;i<(1<<tol);i++) //质因数的组合方法有2的tol次幂个{int k=1,sum=0;for(int j=0;j<tol;j++){if(i&(1<<j)) //求一个具体的质因数组合,使用按位与方法{k=k*prime[j];sum++;}}cnt[k]++;num[k]=sum;}
}
int main()
{int m,n;long long i;for(i=1;i<10010;i++)p[i]=i*(i-1)*(i-2)*(i-3)/24;while(cin>>n){memset(cnt,0,sizeof(cnt));for(i=0;i<n;i++){cin>>m;solve(m);}long long ans=0;for(i=0;i<10010;i++){if(cnt[i]>=4){if(num[i]&1) ans = ans+p[cnt[i]];elseans = ans-p[cnt[i]];}}cout<<p[n]-ans<<endl;}return 0;
}
引自:http://www.voidcn.com/article/p-yddwtjwu-bda.html
poj 3904 求四元互质集合相关推荐
- 欧拉函数(求与n互质的数的个数)
求解与n(1-n-1)互质的质因子的个数 解析:(转) 定义:对于正整数n,φ(n)是小于或等于n的正整数中,与n互质的数的数目. 例如:φ(8)=4,因为1,3,5,7均和8互质. 性质:1.若p是 ...
- matlab范德蒙德行列式,求四元一次方程组的解这个 我自己算了很久 算不出来,好像得用范德蒙德行列式,希望能给出关键步骤,并把答案写出.怎么不能出图?...
优质解答 用matlab计算就简单了,指令: y=solve('x^3*a+x^2*b+x*c+d=y1','(x+t)^3*a+(x+t)^2*b+(x+t)*c+d=y2','(x+2*t)^3* ...
- UVA10820欧拉函数求互质的对数
题意: 给出n,算出小于等于n的所有数中,有几对互质: 思路: 利用欧拉函数求与x互质的数的个数prime[x],再将prime[x]递推累加prime[x]=prime[x]+prime[x-1], ...
- `Computer-Algorithm` 数论基础知识 (同余,取模,快速幂,质数,互质,约数,质因子)
catalog 同余 取模 快速幂 质数 互质 约数 质因子 @Delimiter(旧解释) 经验谈 两数之差也整除 加一的特殊性 取模 累加的周期性 取模的唯一集合 取模下的四则运算 除法的不可约性 ...
- 关于求1~n中与m互质的数的个数(容器原理+数论分解质因子)
D. Count GCD 这道题严格来讲不难,a[i]与b[i+1]最大公约数为a[i+1],所以a[i]与b[i+1]必定整除a[i+1],且a[i]/a[i+1]与b[i+1]/a[i+1]互质, ...
- 容斥原理之求区间中与某数互质的个数
一,定义 为了计算时不重不漏,就要不断加减重复部分 观察到:即奇数长度的前面是加号,偶数长度的为减号 二,思路:我们这里可以通过求不互质的数,自然就能得出互质的数,求不互质比较简单(因为他们是目标的质 ...
- 数学--数论--HDU1825(积性函数性质+和函数公式+快速模幂+非互质求逆元)
As we all know, the next Olympic Games will be held in Beijing in 2008. So the year 2008 seems a lit ...
- 容斥原理 —— 求1~n有多少个数与k互质(二进制算法详细解释模板)
这里有一道经典的例题,可以看一下:点击打开链接 这里的n可能要大于k的,所以不能用欧拉函数去做. 我们首先把k分解质因数,储存到p数组中,num表示质因子的数量. void pr(int k) //求 ...
- 求1到n中与n互质的和(数论)解释及证明
给出一个N,求1-N中与N互质的数的和 ∑i=1ni[gcd(i,n)==1]\sum_{i=1}^n i \qquad[gcd(i,n)==1]∑i=1ni[gcd(i,n)==1] 反证法:gc ...
最新文章
- TDD可以驱动设计吗?
- epoll 接口以及原理说明
- 互联网安全问题的起因
- 做了一个RAID 5 10块盘的试验
- Python网络爬虫系列(一)
- Deep Learning的基本思想以及训练过程
- CSS兼容性解决方法!important的IE7,Firefox问题
- python get请求下载excel,前端开发,使用get和post方式下载excel表格
- C语言经典笔试题解析,原来微软笔试题也有简单的,C语言学习专题
- 苹果计算机取消用户名和密码进入不,苹果电脑怎么退出账户登录不了怎么办
- php 开启 exec,如何在php上启用shell_exec和exec?
- android html footer 固定,HTML5+CSS把footer固定在底部
- 京东API详情接口调用示例
- html像素小鸟小游戏,微信小游戏-像素鸟游戏
- [Acwing] 健康的荷斯坦奶牛 -二进制枚举
- 斥资75元,我搭建了自己的博客网站
- lua小技巧——lua全局变量的检测
- TCP模拟HTTP请求
- rabbitmq的安装与命令行管理工具rabbitmqadmin的使用
- linux qt 字体哪个好,QT的的字体使用(全局自带字体特别好用)
热门文章
- DataGrid 数据绑定使用小结三(数据绑定)
- 大量打印怎么省钱,数量多怎么打印便宜
- php 采集邮箱,采集邮箱的php代码(抓取网页中的邮箱地址)
- GIS的核心价值——服务
- CSS进阶之关于网格布局(Grid) 你了解哪些
- 2022年度东湖高新区国家重点研发计划“先进结构与复合材料”重点专项申报指南!
- SQL Server 深入解析索引存储(非聚集索引)
- maven打包时打包指定的lib文件夹
- 计算机网络体系结构详解(7层、5层、4层的区别)
- 『跟着雨哥学AI』系列之八:趣味案例——有关NLP任务数据预处理的那些事儿...