Problem I. Count - HDU - 6434(欧拉函数)
题意
给一个\(n\),计算
\]
题解
令\(a = i - j\)
要求
\]
即求
\]
根据\(gcd\)的性质,即
\]
所以要求的就是\(1\)到\(i-1\)中,与\(2*i\)互质的数的个数。
令\(sum[i]\)为\(i\)的欧拉函数\(\phi\)的前缀和。结论是,对于奇数,答案就是\(sum[i]/2\),对于偶数,答案是\(sum[i]\)。
与\(2*i\)互质的数的个数,和\(\phi(i)\)(与\(i\)互质的数的个数)有什么关系呢?
如果\(i\)是奇数,那么\(1\)到\(i-1\)中与\(i\)互质的所有数中的奇数,都与\(2*i\)互质。而且这些数中,奇数占一半(为什么?因为对于任何一个奇数,小于它的和它互质的数,是以\(k\)和\(n-k\)的形式成对出现的。这两个数必然一奇一偶)。
如果\(i\)是偶数,那么\(1\)到\(i-1\)中与\(i\)互质的所有数,都与\(2*i\)互质。
代码
#include <cstdio>
#include <cmath>
#include <ctime>
#include <algorithm>
#include <iostream>
#define FOPI freopen("in.txt", "r", stdin)
#define FOPO freopen("out.txt", "w", stdout)
using namespace std;
typedef long long LL;
const int maxn = 2e7 + 5;
int phi[maxn], prime[maxn];
LL sum[maxn];
int tot = 0;
void getPhi(int n)
{
for (int i = 2; i <= n; i++) phi[i] = 0;
phi[1] = 1;
for (int i = 2; i <= n; i++)
{
if (!prime[i])
{
prime[++tot] = i;
phi[i] = i-1;
}
for (int j = 1; j <= tot; j++)
{
if (i*prime[j] > n) break;
prime[i*prime[j]] = 1;
if (i % prime[j] == 0)
{
phi[i*prime[j]] = prime[j] * phi[i];
break;
}
else phi[i*prime[j]] = (prime[j]-1)*phi[i];
}
}
}
void init(int n)
{
getPhi(n);
for (int i = 1; i <= n; i++)
if (i % 2 == 1)
sum[i] = sum[i-1] + phi[i] / 2;
else
sum[i] = sum[i-1] + phi[i];
}
int t, n;
int main()
{
init(2e7);
scanf("%d", &t);
for (int ca = 1; ca <= t; ca++)
{
scanf("%d", &n);
printf("%lld\n", sum[n]);
}
}
Problem I. Count - HDU - 6434(欧拉函数)的更多相关文章
- hdu 6390 欧拉函数+容斥(莫比乌斯函数) GuGuFishtion
http://acm.hdu.edu.cn/showproblem.php?pid=6390 题意:求一个式子 题解:看题解,写代码 第一行就看不出来,后面的sigma公式也不会化简.mobius也不 ...
- hdu 2654(欧拉函数)
Become A Hero Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- hdu 2824(欧拉函数)
The Euler function Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- hdu 1395(欧拉函数)
2^x mod n = 1 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tot ...
- hdu 3307(欧拉函数+好题)
Description has only two Sentences Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/327 ...
- 找新朋友 HDU - 1286 欧拉函数模板题
题意: 求出来区间[1,n]内与n互质的数的数量 题解: 典型的欧拉函数应用,具体见这里:Relatives POJ - 2407 欧拉函数 代码: 1 #include<stdio.h> ...
- hdu 2824 欧拉函数 O(nlogn) 和O(n)
裸题 O(nlogn): #include <cstdio> #include <iostream> #include <algorithm> using name ...
- HDU 5528 Count a * b 欧拉函数
题意: 定义函数\(f(n)\)为\(i \cdot j \not\equiv 0 \; (mod \; n)\)的数对\((i,j)\)的个数\((0 \leq i,j \leq n)\) \(g( ...
- hdu 1787(欧拉函数)
GCD Again Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
随机推荐
- jquery的.get方法说解
·Customer类 public class Customer { public int Unid { get; set; } public string CustomerName { get; s ...
- 使用Quartz任务调用的时候报错Based on configured schedule, the given trigger will never fire.
org.quartz.SchedulerException: Based on configured schedule, the given trigger will never fire. 大概意思 ...
- js和JQuery中offset等属性对比
HTML: 内容在滚动条下面 <div id="outerDiv"> <div id="myDiv" class="myDiv&qu ...
- java递归展示树形图代码实现以及遇到的问题
我最近写到了一个项目中用到了树形图,不得不说这个树形图是真的扯淡: 我用到的是layui中的树形图,再展示数据过程中遇到了很多的问题,废话不多说,直接贴代码. 一.调用排序接口,对数据进行排序. 二. ...
- asp.net 子域跨域 带cookie
先来一个老外的解决方案: http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api ...
- hibernate课程 初探单表映射2-1 hibernate进阶 本章简介
本章简介,主要讲5大块的内容 1 hibernate.cfg.xml的配置 2 session 的简介 3 transaction的简介 4 session的详解 5 对象关系映射常用配置
- SpringBoot的日志管理
SpringBoot的日志管理 SpringBoot关于日志的官方文档 1.简述 SpringBoot官方文档关于日志的整体说明 本博客基于SpringBoot_1.3.6大家请先简单看下这篇英文的官 ...
- 一个简单的EventEmitter
用JS写了一个简单的EventEmitter: class EventEmitter { /** * 事件名/回调列表 字典 * @type {Map<string, Array<func ...
- JVM(二):垃圾回收
三个问题: 那些内存需要回收? -- 对象是否存活判断 什么时候回收? --垃圾回收触发条件 如何回收? --垃圾回收算法 垃圾回收应用 -- 理解GC日志.使用垃圾回收命令和工具 1. 判断 ...
- Android list加载图片工具类
总体思路 Handler + looper + message 核心类 package com.base.imagechoose.util; import android.graphics.Bitma ...