列表

详情


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最小的质因数为3
9最小的质因数为3
第2小的最小质因数为3的数就是9

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++(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");
 } 

上一题