当前位置: 代码迷 >> 综合 >> NYOJ - 小明求素数积
  详细解决方案

NYOJ - 小明求素数积

热度:36   发布时间:2024-01-20 18:12:00.0

小明求素数积

时间限制: 1000 ms  |           内存限制: 65535 KB
难度: 1
描述

小明最近遇到了一个素数题,是给你一个正整数N(2=<N<=1000)让你求出2~N的所有素数乘积的后六位。

输入
第一行输入一个正整数T(T<=20)表示有T组数据
每组数据占一行,输入一个正整数N(2=<N<=1000)
输出
每组数据输出占一行,输出2~N素数乘积的后六位
样例输入
3
3
6
43
样例输出
6
30
670030
#include <stdio.h>
#define MAX 1000
int main()
{int n;int a[MAX] ={0};for(int i = 2; i < MAX/2; i++){if(a[i] == 0)for(int j = i + i; j < MAX; j += i)a[j] = 1;}scanf("%d",&n);while(n--){int m;scanf("%d",&m);long long s = 1;for(int i = 2; i <= m; i++){if(a[i] == 0){s *= i;s %= 1000000;}}printf("%lld\n",s);}}

这题很多人利用数组模拟大数相乘的方法来做,其实,没有这个必要,因为,我们只需要每次相乘后的数字的后六位,这题已经AC了,这里提供参考。

  相关解决方案