BZOJ2190 SDOI2008 仪仗队

来源:互联网 发布:淘宝网严重违规节点 编辑:程序博客网 时间:2024/05/01 04:07

今天在学数论基础这一题一开始看到题目先打了个暴力GCD

结果很明显,TLE

然后我发现我枚举的数的GCD==1,不就相当于是和这个数互质的数吗?

那么想到了欧拉函数,于是乎百度了欧拉函数,顺利A了此题,下面是代码

#include<iostream>#include<fstream>#include<algorithm>#include<cmath>#include<cstring>using namespace std;long long n,ans;int gcd(int a,int b){if(b==0){return a;}else{return gcd(b,a%b);}}int euler[40005];void Init(){    euler[1]=1;    for(int i=2;i<40003;i++){    euler[i]=i;}    for(int i=2;i<40003;i++){    if(euler[i]==i){        for(int j=i;j<40003;j+=i){           euler[j]=euler[j]/i*(i-1);//先进行除法是为了防止中间数据的溢出     }}}}int main(){cin>>n;Init();for(int i=1;i<=n-1;i++){//for(int j=1;j<=n-1;j++){//if(gcd(i,j)==1){ans+=euler[i];//}}ans*=2;cout<<ans+1<<endl;return 0;}/*in:4out:9in:6out:20*/ 


0 0
原创粉丝点击