• P2303 [SDOI2012] Longge 的问题


    Jennie

    结合一下上一个题的思想,先确定一下这个最大公因数可以是谁--n的因数,

    所以说肯定要对n的每一个因数的倍数下手,其中去除乘起来为n的哪个外,我们要注意一下剩下的倍数要跟他互质

    ‘这不就和上个题一样了

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    #include<cmath>
    #define int long long
    using namespace std;
    int prime[9000006];
    int vis[9000005];
    int sum[9000005];
    int n;
    int p;
    void ini(){
    	int nn=sqrt(n);
    	for(int i=2;i<=nn;++i){
    		if(!vis[i]){
    			p++;
    			prime[p]=i;
    		}
    		for(int j=1;j<=p&&i*prime[j]<=nn;j++){
    			vis[i*prime[j]]=1;
    			if(i%prime[j]==0){
    				break;
    			}
    		}
    	}
    }
    int ans;
    int phi(int x){
    	int tem=x;
    	for(int i=1;i<=p&&prime[i]*prime[i]<=x;++i){
    		if(x%prime[i]) continue;
    		tem=tem/prime[i]*(prime[i]-1);
    		while(x%prime[i]==0) x/=prime[i];
    	}
    	if(x>1) tem=tem/x*(x-1);
    	return tem;
    }
    signed main(){
    	scanf("%d",&n);
    	ini();
    	for(int i=1;i*i<=n;++i){
    		if(n%i==0){
    			if(i*i!=n)
    			ans+=i*phi(n/i)+(n/i)*phi(i);
    			else
    			ans+=i*phi(i);
    		}		
    	}
    	cout<<ans;
    	return 0;
    }
    
  • 相关阅读:
    CAS配置记录
    线程同步机制
    线程
    异常
    List集合
    数据结构
    泛型+通配符高级使用--受限泛型
    Collection集合+迭代器+foreach循环
    easyui获取日期datebox中的值
    EL表达式与三目运算符
  • 原文地址:https://www.cnblogs.com/For-Miku/p/15077732.html
Copyright © 2020-2023  润新知