51nod1040 最大公约数之和,欧拉函数或积性函数

1040 最大公约数之和

  给出一个n,求1-n这n个数,同n的最大公约数的和。比如:n = 6时,1,2,3,4,5,6 同6的最大公约数分别为1,2,3,2,1,6,加在一起 = 15

  看起来很简单对吧,但是n<=1e9,所以暴力是不行的,所以要把公式进行推导。

  引用51nod1040最大公约数之和(欧拉函数)

  

  这个自己上手推一下也很好推的,不过没推过公式的可能不太懂。

 1 #include<cstdio>
 2 #include<cmath>
 3 typedef long long ll;
 4 const int N=52118;
 5 bool nop[N]={false};
 6 int pn,pri[N];
 7 void init()
 8 {
 9     pn=0;
10     for(int i=2;i<N;i++)
11     {
12         if(!nop[i])
13             pri[pn++]=i;
14         for(int j=0;j<pn&&1ll*i*pri[j]<N;j++)
15         {
16             nop[i*pri[j]]=true;
17             if(i%pri[j]==0)
18                 break;
19         }
20     }
21 }
22 int phi(int x)
23 {
24     int ans=x;
25     for(int i=0;i<pn&&pri[i]*pri[i]<=x;i++)
26         if(x%pri[i]==0)
27         {
28             ans=ans-ans/pri[i];
29             while(x%pri[i]==0)
30                 x/=pri[i];
31         }
32     if(x>1)
33         ans=ans-ans/x;
34     return ans;
35 }
36 ll solve(int x)
37 {
38     ll ans=0;
39     int xx=sqrt(x);
40     for(int i=1;i<=xx;i++)
41     {
42         if(x%i==0)
43         {
44             ans+=i*phi(x/i);
45             if(x/i!=i)
46                 ans+=x/i*phi(i);
47         }
48     }
49     return ans;
50 }
51 int main()
52 {
53     int n;
54     init(); 
55     while(~scanf("%d",&n))
56         printf("%lld\n",solve(n)); 
57     return 0;
58 }
欧拉函数

  另一个方法就是首先可以观察看出f(n)=∑gcd(i,n)是积性函数的性质(不懂证明),然后借用积性函数的性质

  

  这样要求f(n),我们只需要知道f(pk)等于多少就行了,而f(pk)的话

  

  而不懂怎么化简成最后一步的话,直接跑第一步的式子也行,因为pk它的因子也不会有多少个

 1 #include<cstdio>
 2 #include<cmath>
 3 typedef long long ll;
 4 const int N=52118;
 5 bool nop[N]={false};
 6 int pn,pri[N];
 7 void init()
 8 {
 9     pn=0;
10     for(int i=2;i<N;i++)
11     {
12         if(!nop[i])
13             pri[pn++]=i;
14         for(int j=0;j<pn&&1ll*i*pri[j]<N;j++)
15         {
16             nop[i*pri[j]]=true;
17             if(i%pri[j]==0)
18                 break;
19         }
20     }
21 }
22 int phi(int x)
23 {
24     int ans=x;
25     for(int i=0;i<pn&&pri[i]*pri[i]<=x;i++)
26         if(x%pri[i]==0)
27         {
28             ans=ans-ans/pri[i];
29             while(x%pri[i]==0)
30                 x/=pri[i];
31         }
32     if(x>1)
33         ans=ans-ans/x;
34     return ans;
35 }
36 //不化简 
37 //ll solve(int x)
38 //{
39 //    ll ans=1,res;
40 //    for(int i=0;i<pn&&pri[i]<=x;i++)
41 //    {
42 //        if(x%pri[i]==0)
43 //        {
44 //            int y=1,z,num=0;
45 //            res=0; 
46 //            while(x%pri[i]==0)
47 //            {
48 //                x/=pri[i];
49 //                y*=pri[i];
50 //            }
51 //            z=y;
52 //            while(z)
53 //            {
54 //                res+=1ll*(y/z-num)*z;
55 //                num=y/z;
56 //                z/=pri[i];
57 //            }
58 //            ans*=res;
59 //        }
60 //    }
61 //    if(x>1)
62 //        ans*=2ll*x-1;
63 //    return ans;
64 //}
65 ll solve(int x)
66 {
67     ll ans=0;
68     int xx=sqrt(x);
69     for(int i=1;i<=xx;i++)
70     {
71         if(x%i==0)
72         {
73             ans+=i*phi(x/i);
74             if(x/i!=i)
75                 ans+=x/i*phi(i);
76         }
77     }
78     return ans;
79 }
80 int main()
81 {
82     int n;
83     init(); 
84     while(~scanf("%d",&n))
85         printf("%lld\n",solve(n)); 
86     return 0;
87 }
自己瞎搞

 

转载于:https://www.cnblogs.com/LMCC1108/p/11089291.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/350208.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

hide show vue 动画_Vue2.x学习四:过渡动画

Vue 在插入、更新或者移除 DOM 时&#xff0c;提供多种不同方式的应用过渡效果。请注意它的应用场景并不是说我们写了一个动画之后让它一直在动&#xff0c;而是在一个模块显示或隐藏的时候去做一种特效&#xff0c;使得它的过程有过渡性&#xff0c;而不是很突兀的直接消失或显…

Pytorch cifar10离线加载二进制文件

说明直接离线加载cifar10到Pytorch 直接加载6个文件到pytorchdata_batch_1data_batch_2data_batch_3data_batch_4data_batch_5test_batchimport os import cv2 import pickle import numpy as np import matplotlib.pyplot as pltimport torchvision from torch.autograd impor…

spring cloud gateway 深入了解 - Predicate

文章来源 spring cloud gateway 通过谓词&#xff08;Predicate&#xff09;来匹配来自用户的请求 为了方便&#xff0c;使用postman测试不同的谓词的效果 路径谓词&#xff08;Predicate&#xff09;—— 最简单的谓词 配置如下spring:cloud:gateway:routes:# 匹配指定路径的路…

python漏洞检测脚本_URL重定向漏洞,python打造URL重定向漏洞检测脚本

前言&#xff1a;今天学习了重定向漏洞&#xff0c;这个漏洞比较好理解漏洞名&#xff1a;URL重定向漏洞威胁&#xff1a;低漏洞的来源&#xff1a;开发者对head头做好对应的过滤和限制例子&#xff1a;有漏洞的网站&#xff1a;http://a.com/x.php?urlhttp://a.com/login.php…

Pytorch cifar100离线加载二进制文件

说明&#xff1a;直接加载cifar100二进制文件到Pytorch 直接加载文件到pytorchmetatesttrain import os import cv2 import pickle import time import numpy as np import matplotlib.pyplot as pltimport torchvision from torch.autograd import Variable import torch.uti…

为单个Web应用程序配置多个上下文根– JBoss

有时&#xff0c;我们通过在jboss-web.xm l中定义一个来对应用程序进行更改&#xff0c;以支持利用JBoss功能的多个上下文根&#xff0c;如下所示&#xff1a; webapp / WEB-INF / jboss-web.xml&#xff1a; <?xml version"1.0" encoding"UTF-8"?&…

手动升级ubuntu 18.04内核从4.15.0-45-generic到4.15.0-52-generic

1 从下面官网下载相应的包&#xff0c;共3个。 https://kernel.ubuntu.com/~kernel-ppa/mainline/v4.15-rc9/ linux-headers-4.15.0-041500rc9-generic_4.15.0-041500rc9.201801212130_amd64.deb linux-headers-4.15.0-041500rc9_4.15.0-041500rc9.201801212130_all.deb linux-…

cmd52命令发送 mmc_乾坤合一~Linux SD/MMC/SDIO驱动分析(上)

一、SD/MMC/SDIO概念区分SD(SecureDigital)与 MMC(MultimediaCard)SD 是一种 flash memory card 的标准&#xff0c;也就是一般常见的 SD 记忆卡&#xff0c;而 MMC 则是较早的一种记忆卡标准&#xff0c;目前已经被 SD 标准所取代。在维基百科上有相当详细的 SD/MMC 规格说明&…

Pytorch MNIST直接离线加载二进制文件到pytorch

说明&#xff1a;MNIST直接离线加载二进制文件到pytorch 直接以下4个文件读入数据到pytorch中t10k-images-idx3-ubyte.gzt10k-labels-idx1-ubyte.gztrain-images-idx3-ubyte.gztrain-labels-idx1-ubyte.gz import os import numpy as np import gzipimport torch.utils.data a…

爱与愁的心痛

爱与愁的心痛 题目链接 题意 这道题的题意是&#xff0c;给定一个整数数组&#xff0c;数组中的每个元素代表一个不爽的事情的刺痛值。现在需要找出连续m个刺痛值的和的最小值。 思路 读取输入和初始化遍历数组并计算窗口和输出最小和 坑点 数组越界重复计算窗口和 算法一&am…

begintrans返回值_SQL事务回滚 ADO BeginTrans, CommitTran 以及 RollbackTrans 方法

定义和用法这三个方法与 Connection 对象使用&#xff0c;来保存或取消对数据源所做的更改。注释&#xff1a;并非所有提供者都支持事务。注释&#xff1a;BeginTrans、CommitTrans 和 RollbackTrans 方法在客户端 Connection 对象上无效。那客户端不能支持事务? 这是什么意思…

Pytorch Fashion_MNIST直接离线加载二进制文件到pytorch

说明&#xff1a;Fashion_MNIST直接离线加载二进制文件到pytorch 将4个gz直接加载到pytoch用来训练t10k-images-idx3-ubyte.gzt10k-labels-idx1-ubyte.gztrain-images-idx3-ubyte.gztrain-labels-idx1-ubyte.gz import os import numpy as np import gzip import matplotlib.p…

jQuery选择器种类整理

选择器概念 jQuery选择器是通过标签、属性或者内容对HTML内容进行选择&#xff0c;选择器运行对HTML元素组或者单个元素进行操作。 jQuery选择器使用$符号&#xff0c;等同于jquery&#xff0c;例如&#xff1a; $(“li”) jquery(“li”) 同样等同于javascript中的&#xff1…

jee过滤器应用场景_将涡轮增压器添加到JEE Apps

jee过滤器应用场景我扮演的关键角色之一是在本地社区中传播Akka。 作为讨论的一部分&#xff0c;人们通常会想到的问题/疑问是Akka如何针对编写良好的Java / JEE应用程序提供更好的可伸缩性和并发性。 由于底层硬件/ JVM保持不变&#xff0c;因此参与者模型如何比传统的JEE应用…

mysql 列 随机数_mysql mmp 某字段插入随机数!(说不定那天就忘记了,存下来再说)...

UPDATE 表名 SET 字段名ceiling(rand()*500000500000) WHERE (条件);原文链接&#xff1a;http://blog.csdn.net/bobay/article/details/24797525MMP 上面的只能更新一条UPDATE 表名 SET 字段名cast(rand(checksum(newid()))*(24)1 as int) WHERE (条件);上面的就是每条都更新的…

适用于Java开发人员的Elasticsearch:Elasticsearch生态系统

本文是我们学院课程的一部分&#xff0c;该课程的标题为Java开发人员的Elasticsearch教程 。 在本课程中&#xff0c;我们提供了一系列教程&#xff0c;以便您可以开发自己的基于Elasticsearch的应用程序。 我们涵盖了从安装和操作到Java API集成和报告的广泛主题。 通过我们简…

matplotlib markers的类型

https://matplotlib.org/api/markers_api.html matplotlib markers 所有可能的markers定义如下: marker symbol description "." point "," pixel "o" circle "v" triangle_down "^" triangle_up &…

android实时声音信号波形_Android输出正弦波音频信号(左右声道对称)-阿里云开发者社区...

转载请说明出处&#xff01;作者&#xff1a;kqw攻城狮出处&#xff1a;个人站 | CSDN需求&#xff1a;左右声道分别输出不同的音频数据&#xff0c;波形要是一个正弦波&#xff0c;左右声道还要对称&#xff01;对硬件不是很了解&#xff0c;说是要通过音波避障。效果图之前已…

matplotlib color可选

matplotlib color matplotlib中color可用的颜色&#xff1a; cnames { aliceblue: #F0F8FF, antiquewhite: #FAEBD7, aqua: #00FFFF, aquamarine: #7FFFD4, azure: #F0FFFF, beige: #F5F5…

python之scrapy爬取jd和qq招聘信息

1、settings.py文件 # -*- coding: utf-8 -*-# Scrapy settings for jd project # # For simplicity, this file contains only settings considered important or # commonly used. You can find more settings consulting the documentation: # # https://doc.scrapy.org…