2070. Interesting Numbers
Memory limit: 64 MB
Input
Output
Samples
| input | output |
|---|---|
3 7 | 4 |
2 2 | 1 |
77 1010 | 924 |
Problem Source: Ural Regional School Programming Contest 2015
All submissions (2250) All accepted submissions (651) Solutions rating (401)
满意的数有两人都认为有趣的:素数
两人都认为没趣的:合数且因子数不为质数
看样例就知道这样的数很多,
不过可以求不满意的数:合数且因子数为质数
把一个数质因子分解x=p1^a1*p2^a2*p3^a3...
x的因子的个数为 (a1+1)(a2+1)(a3+1)。。。。()
上式中的每一项都是大于1的,而我们如果要求上式的结果为一个质数,很明显只能留下一项,且这一项为一个质数(即ai+1为一个质数)那么不满意的数就是:质数的 质数减一 次方,这样他的因子肯定是质数个
#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<queue>
#include<map>
#include<vector>
#include<math.h>
using namespace std;
bool prime[1000005];
void getprime()
{
long long int i,j;
memset(prime,0,sizeof(prime));
for(i=2;i<=1000000;i++)
{
if(!prime[i])
{
for(j=2;j*i<=1000000;j++)
{
prime[j*i]=true;
}
}
}
}
long long int solve(long long x)
{
long long ans=x,i,j,k;
for(i=2;i*i<=x;i++)
{
if(!prime[i])
{
k=i;
for(j=3;j<1000001;j++)
{
k*=i;
if(k>x)
break;
if(!prime[j])
ans--;
}
}
}
return ans;
}
int main()
{
getprime();
long long l,r;
scanf("%lld %lld",&l,&r);
printf("%lld\n",solve(r)-solve(l-1));
return 0;
}
1403



被折叠的 条评论
为什么被折叠?



