NC14832. 珂朵莉的数论题
描述
珂朵莉想求:
第x小的正整数v使得其最小的质因数为质数y,即正好有x-1个[1,v-1]之内的正整数满足其最小的质因数为质数y。
若答案超过1000000000则输出0。
输入描述
第一行两个正整数x,y
输出描述
输出一个整数表示答案
示例1
输入:
2 3
输出:
9
示例2
输入:
21000000 11
输出:
0
示例3
输入:
1500 13
输出:
93769
说明:
3最小的质因数为3C++(g++ 7.5.0) 解法, 执行用时: 334ms, 内存消耗: 424K, 提交时间: 2022-10-16 21:26:53
#include<iostream> #define MAX 1000000000 using namespace std; int main() { int x,y; cin>>x>>y; if(y==2||x==1) { long long res=x*y; if(res>MAX) cout<<0; else cout<<res; return 0; } int sum=0; for(int i=y;x>1;i+=2) { sum=y*i; if(sum>MAX) break; int j; for(j=3;j<y;j+=2) { if(i%j==0) break; } if(j>=y) x--; } if(x!=1) sum=0; cout<<sum; return 0; }
C++ 解法, 执行用时: 335ms, 内存消耗: 420K, 提交时间: 2021-07-25 18:36:12
#include<stdio.h> int main() { long long i,j,k,l,n,m; scanf("%lld%lld",&n,&m); if(m==1){printf("%lld",n);return 0;} if(m==2){ if(n*2<=1e9) printf("%lld",n*2); else printf("0");return 0;} n-=1; if(n==0){ printf("%lld",m);return 0;} for(i=m;i*m<=1e9;i+=2){ for(j=3;j<m;j+=2) if(i%j==0)break; if(j<m)continue; n--; if(n==0)break; } if(n==0)printf("%lld",i*m); else printf("0"); }