poj 2478 Farey Sequence(欧拉函数是基于寻求筛法素数)

poj 2478 Farey Sequence(欧拉函数是基于寻求筛法素数)

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

http://poj.org/problem?id=2478

求欧拉函数的模板。

初涉欧拉函数,先学一学它主要的性质。

1.欧拉函数是求小于n且和n互质(包含1)的正整数的个数。

记为φ(n)。

2.欧拉定理:若a与n互质。那么有a^φ(n) ≡ 1(mod n),经经常使用于求幂的模。

3.若p是一个质数,那么φ(p) = p-1。注意φ(1) = 1。

4.欧拉函数是积性函数:

若m与n互质,那么φ(nm) = φ(n) * φ(m)。

若n = p^k且p为质数,那么φ(n) = p^k – p^(k-1) = p^(k-1) * (p-1)。

5.当n为奇数时,有φ(2*n) = φ(n)。

6.基于素数筛的求欧拉函数的重要根据:

设a是n的质因数,若(N%a == 0 && (N/a)%a == 0) 则 φ(N) = φ(N/a)*a; 若(N%a == 0 && (N/a)%a != 0) 则φ(N) = φ(N/a)*(a-1)。


该题就是基于性质六,在线性时间内求欧拉函数。

#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <set>
#include <map>
#include <vector>
#include <math.h>
#include <string.h>
#include <queue>
#include <string>
#include <stdlib.h>
#define LL long long
#define _LL __int64
#define eps 1e-8
#define PI acos(-1.0)

using namespace std;
const int maxn = 1000010;
const int INF = 0x3f3f3f3f;

int n;
LL num[maxn];

LL phi[maxn]; //相应φ(i)
int flag[maxn]; //flag[i] = 0说明i是素数。否则不是素数
int prime[maxn];//存素数

void get_phi()
{
	int i,j,k;
	memset(flag,0,sizeof(flag));
	phi[1] = 1;
	k = 0;

	for(i = 2; i <= maxn; i++)
	{
		if(!flag[i]) //i是素数
		{
			phi[i] = i-1;
			prime[++k] = i;
		}
		for(j = 1; j <= k && prime[j]*i <= maxn; j++)
		{
			flag[i*prime[j]] = 1;
			if(i % prime[j] == 0)
				phi[i*prime[j]] = phi[i] * prime[j];
			else phi[i*prime[j]] = phi[i] * (prime[j]-1);
		}
	}
}

int main()
{
	get_phi();
	num[1] = 0;
	for(int i = 2; i <= maxn; i++)
		num[i] = num[i-1] + phi[i];

	while(~scanf("%d",&n)&&n)
		printf("%lld\n",num[n]);

	return 0;
}

版权声明:本文博客原创文章,博客,未经同意,不得转载。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117698.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java saxreader_java解析XML文件—SAXReader

    java saxreader_java解析XML文件—SAXReaderDOM4j读取XML文件(SAXReader)一、总结:Documentdocument=newSAXReader.reader(“xml文路径/文件名xxx.xml”);//得到Document对象Elementroot=document.getRootElement()//获得根节点Iteratoriterator=root.elementIterator();//从根节点遍历子…

    2022年6月16日
    24
  • docker启动mysql失败(闪退)原因

    docker启动mysql失败(闪退)原因创建好mysql之后容器之后可以连接后来修改了配置发现mysql启动不了dockerps-a查看发现mysql的状态一直是EXISTdockerstartmysql能成功启动(docker返回mysql)但是再查看dockerps发现还是没有启动起来大概可以知道就是docker启动之后又迅速关闭想起Docker容器后台运行,就必须有一个前台进程。否则就会自动关闭,大概推测是docker里的mysql没又起起来。想起刚刚修改了配置,可能是配置错了导致的。一看发现粘贴配置的时候格

    2022年9月2日
    6
  • mysql 修改字段类型

    mysql 修改字段类型mysql修改字段长度altertablenews modifycolumntitlevarchar(130);altertable表名modifycolumn字段名类型;如:news表里的title 字段原来长度是100个字符,现长度要改成130个字符mysql修改字段类型altertablenews mo

    2022年4月29日
    38
  • FileInputStream应用

    FileInputStream应用源码packagecom.io;importjava.io.File;importjava.io.FileInputStream;/***@authoryanyugang*@description*1、FileInputStream读取文件内容*@date2019/10/1310:26*/publicclassFileInputStream…

    2022年5月1日
    44
  • 手机JAVA编程技术[通俗易懂]

    JAVA手机编程技术林天峰(温州职业技术学院计算机系浙江

    2022年4月11日
    57
  • 树莓派python编程指南_树莓派python软件

    树莓派python编程指南_树莓派python软件一:格式化SD卡SD卡插入读卡器连接电脑,使用SDFormatter对SD卡进行格式化(重装烧录也要进行着SD卡格式化操作)二:下载官方镜像http://downloads.raspberrypi.org/raspbian_latest三:烧录SD卡使用Win32DiskImager将镜像烧录到格式化后的SD卡SD卡盘根目录(/boot)下新建一个命名为ssh的…

    2022年10月15日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号