XidianOJ 1098 突击数论前的xry111

题目描述

xry111发现自己的数论知识不太行,于是准备回顾一下以前学过的数论知识后开始学习高深数论以便解决暗黑数学题。回顾过程中,xry111发现欧拉函数挺有用的(欧拉函数是指:对于一个正整数n,小于n且和n互质的正整数(包括1)的个数,记作φ(n)),xry111刚学欧拉函数时每次求φ(n)时总是习惯从1枚举到n-1,然后依次判断其是否合法。所以对于某些比较大的数,当年的xry111常常数数数到头晕。但是现在作为一个可以讲课可以写题解的xry111来说,他想知道某个数的欧拉值已经不必再一个一个的数啦,因为他可以机智的让你帮忙:对于一个数n,你得告诉xry111其欧拉值φ(n)是多少。

输入

多组数据(数据组数大约10^5组),请处理到文件结束,每组数据一行n(1<=n<=10^5)。

输出

每组数据输出一行对应的φ(n)值。

--正文

直接预处理就好。。

#include <cstdio>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <algorithm>
using namespace std;
#define SIZE 100001
int euler(int n){
    int res = 1; int i;
    for (i=2;i*i<=n;i++){
        if (n % i == 0){
            n /= i;
            res *= i-1;
            while (n % i == 0){
                n /= i; res*= i;
            }
        }
    }
    if (n > 1) res*= n-1;
    return res;
} 

int e[SIZE+1];
int main(){
    int i;
    e[1] = 1;
    for (i=2;i<=SIZE;i++){
        e[i] = euler(i);
    }
    int n;
    while (scanf("%d",&n) != EOF){
        printf("%d\n",e[n]);
    }
    return 0;
} 
时间: 2024-08-02 14:21:35

XidianOJ 1098 突击数论前的xry111的相关文章

HDU - 1098 - Ignatius&#39;s puzzle (数论 - 费马小定理)

Ignatius's puzzle Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 7012    Accepted Submission(s): 4847 Problem Description Ignatius is poor at math,he falls across a puzzle problem,so he has no

HDU 1098 [Ignatius&#39;s puzzle] 数论

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1098 题目大意:f(x)=5x^13+13x^5+kax. 给出k,求a使得对任意x,满足f(x)是65的倍数 关键思想:f(x)要是65的倍数,需满足f(x)既是5的倍数又是13的倍数. 1.f(x)为5的倍数需满足  f(x) % 5 = 0 5x^13+13x^5+kax % 5 = 0  x(13x^4+ka) % 5 = 0  对任意x成立    13+ka % 5 = 0  //费马小定

HDU 1098 Ignatius&#39;s puzzle(数论-其它)

Ignatius's puzzle Problem Description Ignatius is poor at math,he falls across a puzzle problem,so he has no choice but to appeal to Eddy. this problem describes that:f(x)=5*x^13+13*x^5+k*a*x,input a nonegative integer k(k<10000),to find the minimal

数论线性筛总结 (素数筛,欧拉函数筛,莫比乌斯函数筛,前n个数的约数个数筛)

线性筛 线性筛在数论中起着至关重要的作用,可以大大降低求解一些问题的时间复杂度,使用线性筛有个前提(除了素数筛)所求函数必须是数论上定义的积性函数,即对于正整数n的一个算术函数 f(n),若f(1)=1,且当a,b互质时f(ab)=f(a)f(b),在数论上就称它为积性函数,若a,b不互质也满足的话则称作完全积性函数,下面说明每个筛子是怎么筛的. 最基础的是素数筛,其它三个筛都是以素数筛为前提 素数筛 void get_prime() { int pnum = 0; for(int i = 2;

Noip前的大抱佛脚----数论

数论 知识点 Exgcd \(O(logn)\)求解\(Ax+By=C\)的问题 1.若\(C\%gcd(A,B)!=0\)则无解 2.\(Gcd=gcd(A,B);A/=Gcd,B/=Gcd,C/=Gcd\) 3.代入下面代码求\(Ax+By=1\) 4.\(x*C\),得到一组特解 5.通解为\(\begin{cases}x=x_0+k*B \\y=y_0+k*A\end{cases}\) void Exgcd(ll a,ll b,ll &x,ll &y) { if(!b){x=1;y

NOI前总结:数论(素数部分)

说到素数不得不说素数判定算法. 其中极为经典的为Rabin Miller测试. 通过二次探测的方法,我们可以将其正确率上升到一个很高的高度. 二次探测的原理我还是不太懂,所以NOI前我暂时只是梳理一下这个算法的流程. 首先,我来介绍一些小Trick. $O(1)$的快速乘. 在一些卡常数而且爆long long的取余问题中我们常常要用到快速乘. 朴素的快速乘是$O(logn)$的,从而添加了不必要的复杂度. 在这里介绍$O(1)$的快速乘. 在 c++ 运算中,有的时候是会爆long long的

XidianOJ 1005 xry111的音频传输

题目描述 众所周知,xry111在硬件方面非常矬,修个耳机都能把声道焊反.现在,xry111为了传送iPhone输出的n声道音频,要接一根n声道音频线.这种线中有n根信号线和1根地线,其中地线以屏蔽层的形式出现,很好区分.但是,对于n根信号线,xry111感觉十分头疼,不敢随意连接,只好拿万用表的导通测试档测定两端线头的对应关系. 例如,若n=3,xry111要确定A端的某根线头与B端的哪一根线头相连,他就把万用表红表笔接在这根线头上,黑表笔逐个测试B端的3根线头.当万用表发出响声时,就说明此时

突击Mercurial SCM(HG)2---当前状态

当我们clone下来代码后,默认会在某个default分支上. hg clone your-src-url 代码库克隆下来后,查看一下当前代码库的状态 14:[email protected]:Demo$ hg summary parent: 2014:xxxxxxxxxxxxxxx This is a description. branch: default commit: 3 unknown (clean) update: (current) 上述我们可以看到,最新的版本(changeset

1098 最小方差 (数论)

1 #include <iostream> 2 #include <cstdio> 3 #include <algorithm> 4 using namespace std; 5 6 typedef long long LL; 7 const int MAXN = 1e4+5; 8 const LL INF = 1e15+5; 9 LL a[MAXN], sum[MAXN], ans[MAXN]; 10 11 int main() 12 { 13 int n, m; 1