URAL 2070 Interesting Numbers(数论)
2017-03-24 15:35
387 查看
题目地址:http://acm.timus.ru/problem.aspx?space=1&num=2070
题意:给定区间[L,R],求出满意数
1.既是素数又有素数个因子
2.既是合数又有合数个因子
如果一个数是素数,那么他有2个因子,即素数个因子满足条件1
如果是合数
N=p1^k1 * p2^k2 * p3^k3 *.........pn^kn
N可以如上分解质因数
因子数为 n=(k1+1)*(k2+1)*(k3+1)......(kn+1)
当n为合数时满足条件2
显然找其反例更简单即n为素数时的情况跟少
如果n=(k1+1)*(k2+1)*(k3+1)......(kn+1)n必定为合数
如果n=(k1+1) 且(k1+1)为素数的时候,n必定为素数
即 ans=(r-l+1)-card{ x | x=a^(b-1),a.b为素数 }
#include<bits/stdc++.h>
#define N 1000000
using namespace std;
vector<int> prime;
bool book[N+10];
int k=0;
void pp(){
int i,j;
memset(book,true,sizeof(book));
for(i=2,k=0;i<=N;i++){
if(book[i]){
prime.push_back(i);
for(j=2;j*i<=N;j++)
book[j*i]=false;
}
}
}
int judge(long long a,long long b,long long l,long long r){
long long s=1,i;
for(i=1;i<=b;i++){
s*=a;
if(s>r) return 1;
}
if(s<l) return -1;
return 0;
}
long long slove(long long l,long long r){
int t;
long long ans=0;
bool flag;
for(auto i:prime){
flag=true;
for(auto j:prime){
if(j==2) continue;
t=judge(i,j-1,l,r);
if(t==1) break;
else{
flag=false;
if(t==0) ans++;
}
if(flag) break;
}
}
return ans;
}
int main(){
pp();
long long l,r;
scanf("%lld%lld",&l,&r);
printf("%lld\n",r-l+1 -slove(l,r) );
return 0;
}
题意:给定区间[L,R],求出满意数
1.既是素数又有素数个因子
2.既是合数又有合数个因子
如果一个数是素数,那么他有2个因子,即素数个因子满足条件1
如果是合数
N=p1^k1 * p2^k2 * p3^k3 *.........pn^kn
N可以如上分解质因数
因子数为 n=(k1+1)*(k2+1)*(k3+1)......(kn+1)
当n为合数时满足条件2
显然找其反例更简单即n为素数时的情况跟少
如果n=(k1+1)*(k2+1)*(k3+1)......(kn+1)n必定为合数
如果n=(k1+1) 且(k1+1)为素数的时候,n必定为素数
即 ans=(r-l+1)-card{ x | x=a^(b-1),a.b为素数 }
#include<bits/stdc++.h>
#define N 1000000
using namespace std;
vector<int> prime;
bool book[N+10];
int k=0;
void pp(){
int i,j;
memset(book,true,sizeof(book));
for(i=2,k=0;i<=N;i++){
if(book[i]){
prime.push_back(i);
for(j=2;j*i<=N;j++)
book[j*i]=false;
}
}
}
int judge(long long a,long long b,long long l,long long r){
long long s=1,i;
for(i=1;i<=b;i++){
s*=a;
if(s>r) return 1;
}
if(s<l) return -1;
return 0;
}
long long slove(long long l,long long r){
int t;
long long ans=0;
bool flag;
for(auto i:prime){
flag=true;
for(auto j:prime){
if(j==2) continue;
t=judge(i,j-1,l,r);
if(t==1) break;
else{
flag=false;
if(t==0) ans++;
}
if(flag) break;
}
}
return ans;
}
int main(){
pp();
long long l,r;
scanf("%lld%lld",&l,&r);
printf("%lld\n",r-l+1 -slove(l,r) );
return 0;
}
相关文章推荐
- Interesting Numbers URAL - 2070 数论
- ural 2070 Interesting Numbers(数论基础)
- Ural 1430. Crime and Punishment(数论)
- URAL 2070 Interesting Numbers(数学)
- URAL 1876 Centipede's Morning[数论]
- Ural 2070 Interesting Numbers
- Ural1049 基础数论
- URAL - 2070
- URAL1014 - Product of Digits - 数论
- H - Interesting Numbers URAL - 2070 ----素数筛+唯一分解定理
- Ural1110(数论)
- Ural2102:Michael and Cryptography(数论&素数)
- URAL 2070 Interesting Numbers (素数枚举)
- URAL 1104 Don’t Ask Woman about Her Age(数论)
- URAL 1133 Fibonacci Sequence(数论)
- Ural 2003: Simple Magic(数论&思维)
- 【线性筛】【筛法求素数】【约数个数定理】URAL - 2070 - Interesting Numbers
- URAL 2070 Interesting Numbers
- URAL 1104(数论)
- URAL 2070