uva 10820 (筛法构造欧拉函数)
send a table
When participating in programming contests, you sometimes face the following problem: You know
how to calcutale the output for the given input values, but your algorithm is way too slow to ever
pass the time limit. However hard you try, you just can’t discover the proper break-off conditions that
would bring down the number of iterations to within acceptable limits.
Now if the range of input values is not too big, there is a way out of this. Let your PC rattle for half
an hour and produce a table of answers for all possible input values, encode this table into a program,
submit it to the judge, et voila: Accepted in 0.000 seconds! (Some would argue that this is cheating,
but remember: In love and programming contests everything is permitted).
Faced with this problem during one programming contest, Jimmy decided to apply such a ’technique’.
But however hard he tried, he wasn’t able to squeeze all his pre-calculated values into a program
small enough to pass the judge. The situation looked hopeless, until he discovered the following property
regarding the answers: the answers where calculated from two integers, but whenever the two
input values had a common factor, the answer could be easily derived from the answer for which the
input values were divided by that factor. To put it in other words:
Say Jimmy had to calculate a function Answer(x, y) where x and y are both integers in the range
[1, N]. When he knows Answer(x, y), he can easily derive Answer(k ∗ x, k ∗ y), where k is any integer
from it by applying some simple calculations involving Answer(x, y) and k.
For example if N = 4, he only needs to know the answers for 11 out of the 16 possible input value
combinations: Answer(1, 1), Answer(1, 2), Answer(2, 1), Answer(1, 3), Answer(2, 3), Answer(3, 2),
Answer(3, 1), Answer(1, 4), Answer(3, 4), Answer(4, 3) and Answer(4, 1). The other 5 can be derived
from them (Answer(2, 2), Answer(3, 3) and Answer(4, 4) from Answer(1, 1), Answer(2, 4) from
Answer(1, 2), and Answer(4, 2) from Answer(2, 1)). Note that the function Answer is not symmetric,
so Answer(3, 2) can not be derived from Answer(2, 3).
Now what we want you to do is: for any values of N from 1 upto and including 50000, give the
number of function Jimmy has to pre-calculate.
Input
The input file contains at most 600 lines of inputs. Each line contains an integer less than 50001 which
indicates the value of N. Input is terminated by a line which contains a zero. This line should not be
processed.
Output
For each line of input produce one line of output. This line contains an integer which indicates how
many values Jimmy has to pre-calculate for a certain value of N.
Sample Input
2
5
0
Sample Output
3
19
题解:输入一个数n,有多少个二元组(x,y)满足:1<=x,y<=n,且x和y互素。不难发现除了(1,1)之外,其他二元组的x和y都不相等。设满足x<y的二元组有a【n】个,那么答案就是2*a【n】-1,因为(1,1)时重复了一个1。
#include <iostream>
#include<cstring>
using namespace std;
int a[];
int sums[];
int f[];
int n;
int main()
{
memset(a,,sizeof(a));
a[]=;
for (int i = ; i < ; ++ i)
if (!a[i])
{
for (int j = i ; j < ; j += i)
{
if(!a[j])
a[j] = j;
a[j] = a[j]/i*(i-);
}
} sums[] = ;
for (int i = ; i < ; ++ i)
sums[i] = sums[i-]+a[i];
while (cin >> n && n)
cout << *sums[n]- << endl; return ;
}
uva 10820 (筛法构造欧拉函数)的更多相关文章
- Help Tomisu UVA - 11440 难推导+欧拉函数,给定正整数N和M, 统计2和N!之间有多少个整数x满足,x的所有素因子都大于M (2<=N<=1e7, 1<=M<=N, N-M<=1E5) 输出答案除以1e8+7的余数。
/** 题目:Help Tomisu UVA - 11440 链接:https://vjudge.net/problem/UVA-11440 题意:给定正整数N和M, 统计2和N!之间有多少个整数x满 ...
- 筛法求欧拉函数(poj2478
求1-n的欧拉函数的值 #include <iostream> #include <cstdio> #include <queue> #include <al ...
- UVA 11426 GCD-Extreme(II) ★ (欧拉函数)
题意 求Σ{1<=i<N} Σ{i<j<=N} GCD(i, j) (N<=4000000) 分析 原始思路 暴力求明显是不行的,我们把式子简化形式一下发现它可以 ...
- AcWing 874. 筛法求欧拉函数
#include<bits/stdc++.h> using namespace std; typedef long long ll; ; int primes[N],cnt; int ph ...
- C++模板:欧拉函数
单个欧拉函数 int eular(int n){ int ret=1,i; for(i=2;i*i<=n;i++) if(n%i==0){ n/=i,ret*=i-1; while(n%i==0 ...
- Farey Sequence (素筛欧拉函数/水)题解
The Farey Sequence Fn for any integer n with n >= 2 is the set of irreducible rational numbers a/ ...
- ACM学习历程—HYSBZ 2818 Gcd(欧拉函数 || 莫比乌斯反演)
Description 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对. Input 一个整数N Output 如题 Sample Input 4 Sam ...
- 数学知识-欧拉函数&快速幂
欧拉函数 定义 对于正整数n,欧拉函数是小于或等于n的正整数中与n互质的数的数目,记作φ(n). 算法思路 既然求解每个数的欧拉函数,都需要知道他的质因子,而不需要个数 因此,我们只需求出他的质因子, ...
- UVA 11424 GCD - Extreme (I) (欧拉函数+筛法)
题目:给出n,求gcd(1,2)+gcd(1,3)+gcd(2,3)+gcd(1,4)+gcd(2,4)+gcd(3,4)+...+gcd(1,n)+gcd(2,n)+...+gcd(n-1,n) 此 ...
随机推荐
- [Locked] Wiggle Sort
Wiggle Sort Given an unsorted array nums, reorder it in-place such that nums[0] <= nums[1] >= ...
- Windows下svn客户端和服务器的安装使用
svn,全称subversion, 是目前用的较多的开源的版本管理工具.相信有些经历的程序员应该都听说过它. 通常的svn服务器是搭建在Linux中,不过如果作为个人或者单个小组使用的话,就可以把sv ...
- 笔试之STL
1. map是如何实现的?它的keys是否经过排序?如何实现它的clear方法? A 实现: map是通过红黑树来实现的,keys是经过排序的: map的所有元素都是pair,同时拥有实值(value ...
- Linux 信号表
信号 取值 默认动作 含义(发出信号的原因) SIGHUP 1 Term 终端的挂断或进程死亡 SIGINT 2 Term 来自键盘的中断信号 SIGQUIT 3 Core 来自键盘的离开信号 SIG ...
- Android(java)学习笔记214:开源框架的文件上传(只能使用Post)
1.文件上传给服务器,服务器端必然要写代码进行支持,如下: 我们新建一个FileUpload.jsp的动态网页,同时我们上传文件只能使用post方式(不可能将上传数据拼凑在url路径下),上传数据Ap ...
- Python之路,Day25-----暂无正在更新中
Python之路,Day25-----暂无正在更新中
- Python之路,Day23-----暂无正在更新中
Python之路,Day23-----暂无正在更新中
- codevs4189字典(字典树)
/* 本字典树较弱 只支持插入单词 查询单词. 特殊的 bool变量w 标记此字母是不是某个单词的结束 (然而这个题并没卵用) */ #include<iostream> #include ...
- codevs3008加工生产调度(Johnson算法)
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> us ...
- rest-简介
一说到REST,我想大家的第一反应就是“啊,就是那种前后台通信方式.”但是在要求详细讲述它所提出的各个约束,以及如何开始搭建REST服务时,却很少有人能够清晰地说出它到底是什么,需要遵守什么样的准则. ...