f(n)
Time Limit: 2000/1000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 165Accepted Submission(s): 92
Problem Description
This time I need you to calculate the f(n) . (3<=n<=1000000)
f(n)= Gcd(3)+Gcd(4)+…+Gcd(i)+…+Gcd(n).
Gcd(n)=gcd(C[n][1],C[n][2],……,C[n][n-1])
C[n][k] means the number of way to choose k things from n some things.
gcd(a,b) means the greatest common divisor of a and b.
Input
There are several test case. For each test case:One integer n(3<=n<=1000000). The end of the in put file is EOF.
Output
For each test case:
The output consists of one line with one integer f(n).
Sample Input
Sample Output
现在仍然不是很懂
/*通过打表找GCD的规律,规律如下:
GCD(n),当n只有一个质因子的时候GCD(n)不会为1。
即质因子数大于等于2 的时候 GCD(n)=1
此时GCD等于n的这个唯一的质因子。
任何一个数都能分解成质因数的次方相乘
*/
#include<stdio.h>
#include<string.h>
#include<math.h>
__int64 prime[100000],c;
__int64 vis[1000000+10];
__int64 sum[1000000+10];
void get_prime()
{
__int64 i,j,n=1000000,m;
c=0;
m=(__int64)sqrt(n+0.5);
memset(vis,0,sizeof(vis));
for(i=2;i<=m;i++)
if(!vis[i])
{
for(j=i*i;j<=n;j+=i) vis[j]=1;
}
for(j=2;j<=n;j++) if(!vis[j])
prime[c++]=j;
}
__int64 get(__int64 n)
{
__int64 i,k,cnt=0;
for(i=0;prime[i]*prime[i]<=n&&i<c;i++)//prime[i]*prime[i] 这里为什么???
{
if(n%prime[i]==0)
{
n=n/prime[i];
while(n%prime[i]==0)
n=n/prime[i];
cnt++;
k=prime[i];
}
if(cnt>=2) return 1;//含有2个质因子 则为1
}
if(n>1) //大于1说明还存在一个质因子 这里说实话我也不懂为什么
{
cnt++;
k=n;
}
if(cnt>=2)
return 1;
else
return k;
}
int main()
{
__int64 i,n;
sum[3]=3;
get_prime();
for(i=4;i<=1000000;i++)
if(vis[i])//不是质数(素数)
sum[i]=sum[i-1]+get(i);
else sum[i]=sum[i-1]+i;//是质数 只有一个质因子 就是其本身
while(scanf("%I64d",&n)!=EOF)
{
printf("%I64d\n",sum[n]);
}
return 0;
}
希望大家把我疑问给我解释下
分享到:
相关推荐
离线OJ题库(HDU ZJU等,部分有答案),需联网。
hdu 1005.比较简单的一道题,有兴趣的可以看看。
一个十分简单的程序,能够ac杭电hdu的第2050题,无注释,简单明了
收集的部分HDOJ杭电ACM题的代码 大牛勿下 全是基础供初级acmer使用
HDU的一题........HDU DP动态规
HDU的1250,主要是利用高精度加法,但是代码有点繁琐,效率不是很高
ACM HDU题目分类,我自己总结的大概只有十来个吧
杭电ACMhdu1163
HDU 动态规划(46道题目
HDU1059的代码
hdu1001解题报告
100道 acm C语言 hdu 解题报告
hdu 1574 passed sorce
Hdu 3333解题报告 题意描述: 给你n个数现在要你求在k个区间上[ai, bi]的不相同的数之和各是多少. N,000; k,000; 显然,这题不能用暴力来做。 这题我们选择用线段数来做。
自己做的HDU ACM已经AC的题目
hdu2101AC代码
我写的hdu上的一些题AC的题的代码 也许你会有用
hdu acm 教案 搜索入门 hdu acm 教案 搜索入门
hdu-acm源代码(上百题)hdu-acm源代码、hdu-acm源代码hdu-acm源代码
搜索 dfs 解题代码 hdu1241