HDU6428-Calculate-数论函数

并不知道为什么同样一份代码早上超时下午就A了…好像数据是随机的?
做的第一道不是简单板题的数论函数题.果然做不出来…
在网上研究了好久,才算稍微研究明白.看到了两种推导的思路.(写了半天发现讲起来好麻烦,有时间再来更新)

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<climits>
#include<cmath>
#include<cstdlib>
#include<ctime>
#include<map>
#include<queue>
#include<set>
#include<vector>using namespace std;typedef long long ll;
const int MAXN=1e7+5;int prime[MAXN],h[MAXN],f2[MAXN],f3[MAXN],deg[MAXN],last[MAXN];
bool check[MAXN]; int tot;void pre()
{h[1]=f2[1]=f3[1]=last[1]=1;   tot=0;for(int i=2;i<MAXN;i++){if(!check[i]){prime[tot++]=i; h[i]=i-2; f2[i]=f3[i]=i; last[i]=1; deg[i]=1;}for(int j=0;j<tot && (ll)prime[j]*i<(ll)MAXN;j++){int x=prime[j]*i; check[x]=true;if(i%prime[j]){h[x]=h[i]*(prime[j]-2); f2[x]=f2[i]*prime[j]; f3[x]=f3[i]*prime[j];last[x]=i; deg[x]=1;}else{last[x]=last[i]; deg[x]=deg[i]+1;if(last[x]>1)	//含有其他因子 {h[x]=h[x/last[x]]*h[last[x]];}else	//素数幂 {//if(deg[x]==2) if(i>prime[j]) h[x]=h[i]*prime[j];else h[x]=(prime[j]-1)*(prime[j]-1);}f2[x]=f2[i]*(deg[x]%2==1?prime[j]:1);f3[x]=f3[i]*(deg[x]%3==1?prime[j]:1);break;}}}
}const int mod=1<<30;
int A,B,C;ll Min(ll A,ll B,ll C)
{ll ret=A;if(B<ret && B*B<ret) ret=B*B;if(C<ret && C*C<ret && C*C*C<ret) ret=C*C*C;return ret;
}int main()
{//printf("mod=%lld\n",mod);pre();int T;scanf("%d",&T);while(T--){ll ans=0;scanf("%d%d%d",&A,&B,&C);int limit=Min(A,B,C);for(int i=1;i<=limit;i++){ans=ans+(ll)h[i]*((A/i)*(B/f2[i])*(C/f3[i]));	//这里这个括号很玄学,去掉后面的括号就会错...并不知道为什么}printf("%lld\n",ans%mod);}return 0;
}

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

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

相关文章

[C/C++]关于C++11中的std::move和std::forward

http://blog.sina.com.cn/s/blog_53b7ddf00101p5t0.htmlstd::move是一个用于提示优化的函数&#xff0c;过去的c98中&#xff0c;由于无法将作为右值的临时变量从左值当中区别出来&#xff0c;所以程序运行时有大量临时变量白白的创建后又立刻销毁&#xff0c;其中又尤其是返回…

BZOJ3930-莫比乌斯反演+杜教筛

题目的意思很简单&#xff0c;求给定区间内的gcdk的个数&#xff0c;这应该是传统的莫比乌斯反演了。 有两种思路&#xff0c;一种是直接将里面变成gcd1&#xff0c;然后里面看作元函数用莫比乌斯函数和恒等函数展开&#xff0c;然后改变求和顺序。 还有一种是构造两个函数&…

HDU1999不可摸数-暴力打表

看到这约数和第一反应是约数和函数&#xff0c;然后仔细一看不是正经的约数和函数&#xff0c;就去推去了&#xff0c;然后推的有点小复杂。&#xff08;数论函数那部分做多了&#xff09; 然后观察也没有用到什么数论部分的特殊知识啊&#xff0c;难不成真的要暴力&#xff1f…

BZOJ2818-莫比乌斯反演/欧拉函数

这道题之前没有看数论函数的时候搞懂了,想到直接用欧拉函数做,现在再来看第一个想法就是这不是莫比乌斯反演嘛. 但还是能用简单数论知识直接做出来的还是尽量做简单一点. 两种方法想到后都写的差不多对了,都爆long long 了.万恶的long long .实在是烦.切记切记,只要是乘积,或…

epoll用法整理 实现回声服务端

http://blog.csdn.net/chenxun_2010/article/details/504934811、epoll是什么&#xff1f; epoll是当前在Linux下开发大规模并发网络程序的热门人选&#xff0c;epoll 在Linux2.6内核中正式引入&#xff0c;和select相似&#xff0c;都是I/O多路复用(IO multiplexing)技术。 Li…

HDU3430-扩展中国剩余定理

刚开始一直把题意看错了。。。体测完智商急剧下降 正确理解题意以后自己写一直wa&#xff0c;而且并不知道是哪里的问题&#xff0c;在网上看了一下其他人写的改了改自己的就过了&#xff0c;可是之前的还是不知道为什么不对。 题意大概就是有一个置换群&#xff0c;问运算多…

linux shell编程多线程和wait命令学习

http://blog.csdn.net/shuanghujushi/article/details/38186303最近在使用shell做一些部署工作&#xff0c;在使用过程中&#xff0c;效率一直不高。想提高效率&#xff0c;经过分析发现&#xff0c;并不是所有操作都是需要串行的&#xff0c;一些操作是可以进行并行操作的。经…

#ifndef的作用

#ifndef是一条预编译指令&#xff0c;就是说实在编译的时候就会运行的指令。这个指令的作用很简单&#xff0c;就是字面意思&#xff0c;如果没有定义的话&#xff0c;但是却经常使用。 因为使用这个可以避免一个源文件中两次两次包含同一个文件&#xff0c;或者一个工程文件中…

C++中结构体和类的区别和联系

最主要的不同点就是结构体的访问权限为public而且不能改变&#xff0c;而类的访问权限可以改变&#xff0c;public的类和结构体基本一样。 继承上同样表现出这样的特点&#xff0c;struct是public继承的&#xff0c;而class是private继承的&#xff0c;继承的子类的访问权限取…

poll函数实现多路复用

http://blog.csdn.net/xluren/article/details/8206371 结构体pollfd struct pollfd { int fd; //file descriptor short event; //event of interest on fd short reven; //event that occurred on fd } 每一个pollfd结构体指定了一个被监视的文件描述符&…

抽象类(纯虚函数、虚函数)和虚基类(虚继承)

C多态 C的多态包括静态多态和动态多态&#xff0c;静态多态包括函数重载和泛型编程&#xff0c;动态多态包括虚函数。静态多态实在编译期间就能确定&#xff0c;动态多态实直在程序运行时才能确定。 抽象类 虚函数 在默认情况下对函数成员调用实施的是静态连编&#xff0c;…

socket通信之最简单的socket通信

http://blog.csdn.net/xluren/article/details/8043484#t15 套接字有三种类型 流式套接字&#xff08;SOCK_STREAM&#xff09;&#xff0c;数据报套接字&#xff08;SOCK_DGRAM&#xff09;及原始套接字。 1.流式套接字提供面向连接、可靠的数据传输服务&#xff0c;数据按字节…

Java环境配置

自己安装的时候按照一般的安装方法先配置了JDK的环境&#xff0c;能够成功显示java版本后我在安装eclipse的时候一直提示错误&#xff1a; Unfortunately the Java version needed to run Eclipse Installer couldn’t be found on your system. You need the following versio…

Linux I/O复用之select函数详解

http://blog.csdn.net/y396397735/article/details/55004775 select函数的功能和调用顺序 使用select函数时统一监视多个文件描述符的&#xff1a; 1、 是否存在套接字接收数据&#xff1f; 2、 无需阻塞传输数据的套接字有哪些? 3、 哪些套接字发生了异常&#xff1f; sel…

【Java学习笔记一】类和对象

面向对象程序设计的一个一个重要特点是&#xff1a;封装性。 这里的封装性有两方面含义&#xff1a;一是将有关的数据和操作代码封装在一个对象中形成一个基本单位&#xff0c;各个对象之间相互独立互不干扰&#xff0c;二是将对象中某些部分对外隐蔽&#xff0c;即隐蔽其内部细…

深入研究socket编程(3)——使用select函数编写客户端和服务器

http://blog.csdn.net/chenxun_2010/article/details/50488394 首先看原先《UNIX网络编程——并发服务器&#xff08;TCP&#xff09;》的代码&#xff0c;服务器代码serv.c&#xff1a; [cpp] view plaincopy #include<stdio.h> #include<sys/types.h> #inclu…

Java简单输入输出

不同于面向过程中有直接的输入输出函数&#xff0c;Java中的输入输出只能通过类来实现。 比较常见的一种是使用Scanner类 需要引入java.util包&#xff0c;即在文件开始加上语句import java.util.*;创建Scanner类对象&#xff0c;属于标准输入流。 例如Scanner snew Scanner(S…

Ubuntu安装搭建Clion环境

呜呜呜&#xff0c;太辛苦了&#xff0c;我终于安装好这个了。 大概过程就是先在官网下载安装包&#xff0c;然后解压以后用终端移动到对应文件夹下运行clin.sh 运行完以后会有一些窗口&#xff0c;第一个选择don’t~~&#xff0c;然后点击ok 接受&#xff08;你可以不接受…

UNIX网络编程——select函数的并发限制和 poll 函数应用举例

http://blog.csdn.net/chenxun_2010/article/details/50489577 一、用select实现的并发服务器&#xff0c;能达到的并发数&#xff0c;受两方面限制 1、一个进程能打开的最大文件描述符限制。这可以通过调整内核参数。可以通过ulimit -n来调整或者使用setrlimit函数设置&#x…

【Java学习笔记二】继承和多态

与C不同的是&#xff0c;在Java中&#xff0c;一个类只能直接继承另一个类&#xff0c;而不允许继承多个类&#xff0c;这个新类称为继承类、派生类或者子类&#xff0c;而被继承的类称为基类或者父类。 继承类能够继承基类的群不属性和行为。 面向对象程序设计的三大特点为&…