程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> HDU3501 Calculation 2(歐拉函數推廣)

HDU3501 Calculation 2(歐拉函數推廣)

編輯:C++入門知識

HDU3501 Calculation 2(歐拉函數推廣)


 

題意:求小於n的與n不互質的數的和;

分析:

歐拉函數的推廣:

小於n的與n互質的數為phi(n),小於n的與n互質的數的和為phi(n)*n/2;

代碼如下:

 

#include 
#include 
#include 
using namespace std;

typedef long long LL;

const int mod = 1000000007;

LL phi(LL n)
{
    LL rea=n;
    for(int i=2;i*i<=n;i++){
        if(n%i==0){
            rea-=rea/i;
            while(n%i==0)
                n/=i;
        }
    }
    if(n>1) rea-=rea/n;
    return rea;
}
int main()
{
    LL n;
    while(cin>>n){
        if(n==0) break;
        cout<<((n-1)*n/2%mod-phi(n)*n/2%mod+mod)%mod<

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved