hdu 5212 Code 篩法或者莫比烏斯
阿新 • • 發佈:2017-09-08
ott eat for php -- ++ inpu for each first
The function:
int calc
{
int res=0;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
res+=gcd(a[i],a[j])*(gcd(a[i],a[j])-1);
res%=10007;
}
return res;
}
For each case:
The first line contains an integer N(1≤N≤10000).
The next line contains N integers a1,a2,...,aN(1≤ai≤10000).
Print an integer,denoting what the function returns.
Code
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
The function:
int calc
{
int res=0;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
res+=gcd(a[i],a[j])*(gcd(a[i],a[j])-1);
res%=10007;
}
return res;
}
Input There are Multiple Cases.(At MOST 10)
For each case:
The first line contains an integer N(1≤N≤10000).
The next line contains N
Output For each case:
Print an integer,denoting what the function returns.
Sample Input 5 1 3 4 2 4
Sample Output 64 Hint gcd(x,y) means the greatest common divisor of x and y.
Source BestCoder Round #39 ($)
先占坑,晚點補莫比烏斯
#include<bits/stdc++.h> using namespace std; #define LL long long #define pi (4*atan(1.0)) #define eps 1e-8 #define bug(x) cout<<"bug"<<x<<endl; const int N=1e4+10,M=1e6+10,inf=1e9+10; const LL INF=1e18+10,mod=1e9+7; int cnt[N],sum[N]; int main() { int n; while(~scanf("%d",&n)) { memset(cnt,0,sizeof(cnt)); memset(sum,0,sizeof(sum)); for(int i=1;i<=n;i++) { int x; scanf("%d",&x); cnt[x]++; } for(int i=1;i<=10000;i++) { for(int j=i;j<=10000;j+=i) sum[i]+=cnt[j]; sum[i]=sum[i]*sum[i]; } LL ans=0; for(int i=10000;i>=1;i--) { for(int j=i+i;j<=10000;j+=i) sum[i]-=sum[j]; //if(sum[i])cout<<i<<" "<<sum[i]<<endl; ans+=1LL*i*(i-1)*sum[i]; ans%=10007; } printf("%lld\n",ans); } return 0; }
hdu 5212 Code 篩法或者莫比烏斯