hdu——3501(数论之容斥原理)
2013-08-12 16:35
471 查看
#include <iostream> #include <cmath> #include <string> #include <cstring> #include <algorithm> #include <cstdio> using namespace std; typedef long long ll; #define INF 0xfffffff #define MAX(a,b) a>b?a:b #define MIN(a,b) a>b?b:a #define MOD 1000000007 #define M 1000000 short int flag[M]; int prime[200000];//当M比较大的时候(大于10e5)素数大概就是范围的1/10 int q=0;//素数的下标 void sieve_prime() //筛法求素数 { memset(flag,0,sizeof(flag)); int i; for(i=2;i*i<M;i++) { //边筛边存 if(flag[i]) continue; prime[q++]=i; for(int j=i*i;j<M;j+=i) flag[j]=1; } for(i;i<M;i++) //存另一部分素数 if(!flag[i]) prime[q++]=i; } ll a[30]; int p; void resolve(int n) //分解N { p=0; for(int i=0;prime[i]*prime[i]<=n&&n!=1;i++) { if(n%prime[i]==0) { a[p++]=(ll)prime[i]; while(n%prime[i]==0) n/=prime[i]; } } if(n!=1) a[p++]=n; } void deal_with(ll n) { ll ans=0; int end=1<<p; int temp; int k; int count_1; ll mid; ll item; ll item_sum; for(int i=1;i<end;i++) { temp=i; k=0; count_1=0; mid=1; while(temp) { if(temp&1) count_1++,mid*=a[k]; //mid记录的是选取的几个素数(1的时候选取)的乘积 k++; //k表示选取的那个数。 temp/=2; } item=((n-1))/mid; //下面为等差数列求和 item_sum=((item*mid)%MOD+((((item)*(item-1)/2)%MOD)*mid)%MOD)%MOD;//处理仔细点 if(count_1%2) ans=(ans+item_sum)%MOD; //count_1记录的是选取的个数 else ans=(MOD-item_sum+ans)%MOD; } cout<<ans<<endl; } int main() { int i,j,k,t; ll m,n; sieve_prime() ; while(cin>>n&&n) { resolve(n); deal_with(n); } return 0; }
相关文章推荐
- hdu 1695 综合数论 欧拉函数 分解质因子 容斥原理 打印素数表 帅呆了的一个题目 详解
- 数论(容斥原理)hdu-4059-The Boss on Mars
- 数论+容斥原理 --hdu 上的几题
- 【中国剩余定理】【容斥原理】【快速乘法】【数论】HDU 5768 Lucky7
- 2016多校4 hdu 5768 Lucky7 数论+容斥原理
- HDU 5072 Coprime(数论+容斥原理)
- 数论(容斥原理)hdu-4509-The Boss on Mars
- hdu 1659 综合数论+ 筛选欧拉函数 +质因子 +容斥原理
- 容斥原理 学习 M - Calculation 2 HDU - 3501
- HDU 1695 GCD (数论-整数和素数,欧拉函数,组合数学-容斥原理)
- HDU 3501 Calculation 2 (欧拉函数||容斥原理)
- HDU 2841 Visible Trees 数论+容斥原理
- HDU 2841 Visible Trees 数论+容斥原理
- HDU 2841 Visible Trees (数论,容斥原理)
- 【中国剩余定理】【容斥原理】【快速乘法】【数论】HDU 5768 Lucky7
- HDU 4135 Co-prime(容斥原理 + 基础数论)
- HDU 3501 数论 欧拉函数的应用
- hdu 1695 数论+容斥原理
- HDU 2204 Eddy's爱好(数论,容斥原理)
- hdu 2204 Eddy's爱好 (数论,容斥原理)