HDU 3970 Harmonious Set 容斥欧拉函数
题解:www.cygmasot.com/index.php/2015/08/17/hdu_3970
给定n
。。。并不会怎样递推。
。
思路:
然后这是公式: q=2%2C2%2C4%2C4%2C8%2C12%2C20%2C32%2C60&language=english&go=Search">点击打开链接
a(n) = 1/n * sum_{d divides n and d is odd} 2^(n/d) * phi(d).
d最大是n,也就是1e9,要计算1e9的phi,所以容斥来算phi.
#pragma comment(linker, "/STACK:1024000000,1024000000")
#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <sstream>
#include <stdlib.h>
#include <string.h>
#include <limits.h>
#include <vector>
#include <string>
#include <time.h>
#include <math.h>
#include <iomanip>
#include <queue>
#include <stack>
#include <set>
#include <map>
const int inf = 1e9;
const double eps = 1e-8;
const double pi = acos(-1.0);
template <class T>
inline bool rd(T &ret) {
char c; int sgn;
if (c = getchar(), c == EOF) return 0;
while (c != '-' && (c<'0' || c>'9')) c = getchar();
sgn = (c == '-') ? -1 : 1;
ret = (c == '-') ? 0 : (c - '0');
while (c = getchar(), c >= '0'&&c <= '9') ret = ret * 10 + (c - '0');
ret *= sgn;
return 1;
}
template <class T>
inline void pt(T x) {
if (x < 0) { putchar('-'); x = -x; }
if (x > 9) pt(x / 10);
putchar(x % 10 + '0');
}
using namespace std;
const int N = 1e5 + 10;
const int mod = 1e9 + 7;
typedef long long ll;
typedef pair<int, int> pii;
int Pow(int x, int y){//高速幂
int ans = 1;
while (y){
if (y & 1)ans = (ll)ans*x%mod;
y >>= 1;
x = (ll)x*x%mod;
}
return ans;
}
int prime[N], primenum;//素数表
void PRIME(int Max_Prime){
primenum = 0;
prime[primenum++] = 2;
for (int i = 3; i <= Max_Prime; i += 2)
for (int j = 0; j<primenum; j++)
if (i%prime[j] == 0)break;
else if (prime[j]>sqrt((double)i) || j == primenum - 1)
{
prime[primenum++] = i;
break;
}
}
void add(int &x, int y){ x += y; if (x >= mod)x -= mod; }//加法
void go(int x, vector<int>&Pri, vector<int>&Num){//分解质因数
Pri.clear(); Num.clear();
while (!(x & 1))x >>= 1;
for (int i = 1; (ll)prime[i] * prime[i] <= x; i++){
if (x%prime[i])continue;
Pri.push_back(prime[i]);
Num.push_back(0);
while (x%prime[i] == 0)x /= prime[i], Num[Num.size() - 1]++;
}
if (x != 1 && (x&1))Pri.push_back(x), Num.push_back(1);
}
vector<int>_pri, _num;
void cal(int id, int mul, int siz, int sor, int &now){//容斥算欧拉函数
if (id == _pri.size()){
if (mul == 1)return;
if (siz & 1)now += sor / mul;
else now -= sor / mul;
return;
}
cal(id + 1, mul, siz, sor, now);
cal(id + 1, mul*_pri[id], siz + 1, sor, now);
}
int phi(int x){
if (x == 1)return 1;
go(x, _pri, _num);
int now = 0;
cal(0, 1, 0, x, now);
return x - now;
}
int ans, n;
vector<int>pri, num;
void dfs(int id, int d){
if (id == pri.size())
{
add(ans, (ll)Pow(2, n / d) * phi(d) % mod);
return;
}
for (int i = 0; i <= num[id]; i++){
dfs(id + 1, d);
d *= pri[id];
}
}
int main(){
PRIME(1e5);
int T; rd(T);
while (T--){
rd(n);
go(n, pri, num);
ans = 0;
dfs(0, 1);
pt((ll)ans*Pow(n, mod - 2) % mod); puts("");
}
return 0;
}
HDU 3970 Harmonious Set 容斥欧拉函数的更多相关文章
- hdu 1695 GCD 容斥+欧拉函数
题目链接 求 $ x\in[1, a] , y \in [1, b] $ 内 \(gcd(x, y) = k\)的(x, y)的对数. 问题等价于$ x\in[1, a/k] , y \in [1, ...
- hdu 1286 找新朋友 (欧拉函数)
Problem Description 新年快到了,"猪头帮协会"准备搞一个聚会,已经知道现有会员N人,把会员从1到N编号,其中会长的号码是N号,凡是和会长是老朋友的,那么该会员的 ...
- hdu 4983 Goffi and GCD(欧拉函数)
Problem Description Goffi is doing his math homework and he finds an equality on his text book: gcd( ...
- HDU 6322.Problem D. Euler Function -欧拉函数水题(假的数论题 ̄▽ ̄) (2018 Multi-University Training Contest 3 1004)
6322.Problem D. Euler Function 题意就是找欧拉函数为合数的第n个数是什么. 欧拉函数从1到50打个表,发现规律,然后勇敢的水一下就过了. 官方题解: 代码: //1004 ...
- HDU——1286找新朋友(欧拉函数+质数打表)
找新朋友 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- hdu 1286 找新朋友(欧拉函数)
题意:欧拉函数 思路:欧拉函数 模板,代码略.
- HDU 6390 GuGuFishtion(莫比乌斯反演 + 欧拉函数性质 + 积性函数)题解
题意: 给定\(n,m,p\),求 \[\sum_{a=1}^n\sum_{b=1}^m\frac{\varphi(ab)}{\varphi(a)\varphi(b)}\mod p \] 思路: 由欧 ...
- hdu 2824 The Euler function(欧拉函数)
如果打表的话会超内存,我想到了一种方法解决这个问题.题目给出的数据时3000000,我将三百万分成300个数据,将整万的数据存储下来,计算的时候,先计算x和y之间整万的数据,然后再计算零散数据. 想法 ...
- hdu 6390 欧拉函数+容斥(莫比乌斯函数) GuGuFishtion
http://acm.hdu.edu.cn/showproblem.php?pid=6390 题意:求一个式子 题解:看题解,写代码 第一行就看不出来,后面的sigma公式也不会化简.mobius也不 ...
随机推荐
- Python3高级用法综合举例
[本文出自天外归云的博客园] 举例 下面代码围绕一个Student类综合举例说明装饰器.生成器.动态获取/添加类成员.列表推导式.reduce函数.lambda表达式的实际应用: from funct ...
- 获得discuz7.2 目录下所有文件,并写到txt
# -*- coding: utf-8 -*- import os fileList = [] dzList = [] def GetFileList(path): List = [] for roo ...
- 6. 支持向量机(SVM)核函数
1. 感知机原理(Perceptron) 2. 感知机(Perceptron)基本形式和对偶形式实现 3. 支持向量机(SVM)拉格朗日对偶性(KKT) 4. 支持向量机(SVM)原理 5. 支持向量 ...
- iOS录制视频
随着每一代 iPhone 处理能力和相机硬件配置的提高,使用它来捕获视频也变得更加有意思.它们小巧,轻便,低调,而且与专业摄像机之间的差距已经变得非常小,小到在某些情况下,iPhone 可以真正替代它 ...
- java判断是移动端还是pc端
// \b 是单词边界(连着的两个(字母字符 与 非字母字符) 之间的逻辑上的间隔), // 字符串在编译时会被转码一次,所以是 "\\b" // \B 是单词内部逻辑间隔(连着的 ...
- mysql单表体积和一个库设计多少张表为妥
这篇文章来自于看博客园一个园友的分享经历,原文:http://www.cnblogs.com/qqloving/p/3427138.html 他不清楚mysql一个库里面分多少张表合适,他一个库分了8 ...
- Linux0.11从开机到准备执行main函数的启动学习
最近一直在看操作系统以及内核设计的东西,不确定自己有能力会参与到类似的开发之中,但是争取能自己改造这内核玩一下,然后按照Linux From Scratch那样的把改造后的系统编译运行就心满意足了.正 ...
- TP v5中环境变量在项目中的应用
环境变量,顾名思义就是在不同的系统环境,同一个变量的值可以有所不同. 如开发环境.测试环境与正式环境下,数据库配置.静态资源文件Url前缀.缓存.各种key等配置都不相同,对于提交到仓库中的代码,理论 ...
- Android——indexof()
Java中字符串中子串的查找共有四种方法(indexof()) Java中字符串中子串的查找共有四种方法,如下:1.int indexOf(String str) :返回第一次出现的指定子字符串在此字 ...
- NLP-训练个model出来写诗
2018年新年,腾讯整出来个ai春联很吸引眼球,刚好有个需求让我看下能不能训出来个model来写出诗经一样的文风,求助了下小伙伴,直接丢过来2个github,原话是: 查了一下诗经一共38000个字, ...