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

输入
第一行输入一个正整数T(T<=20)表示有T组数据
每组数据占一行,输入一个正整数N(2=<N<=1000)
输出
每组数据输出占一行,输出2~N素数乘积的后六位

若N=1000 素数的乘积结果超过long int的范围,怎么解决这个问题?

第1个回答  2012-05-26
因为只需要计算乘积的后6位,所以,你的所有乘法运算只需取数字的后六位进行计算即可
因为大于6位的位数的乘积,不影响结果的后六位追问

非常感谢

第2个回答  2012-05-26
#include <stdio.h>
int isprime(int n)
{
int i;
if(n<2)
{
return 0;
}
for(i=2;i*i<=n;++i)
{
if(n%i==0)
{
return 0;
}
}
return 1;
}
long get_out(long m,int n)
{
long temp,result=0L,weight=1L;
while(n)
{
temp=m*(n%10)*weight%1000000L;
result+=temp;
result%=1000000L;
n/=10;
weight*=10L;
}
return result;
}
int main()
{
int t,i,j,in;
long out[20];
scanf("%d",&t);
for(i=0;i<t;++i)
{
scanf("%d",&in);
out[i]=1L;
for(j=2;j<=in;++j)
{
if(isprime(j))
{
out[i]=get_out(out[i],j);
}
}
}
for(i=0;i<t;++i)
{
printf("%ld\n",out[i]);
}
return 0;
}本回答被提问者采纳
第3个回答  2012-05-26
那你就把存结果的变量定义为字符数组啊...这样输出还简单些..只需要输出数组的后六位就可以了追问

具体怎么做呢?
怎样才能把一个数的各位数存到字符数组中?

第4个回答  2012-05-27
#include <stdio.h>
int isprime(int n)
{
int i;
if(n<2)
{
return 0;
}
for(i=2;i*i<=n;++i)
{
if(n%i==0)
{
return 0;
}
}
return 1;
}
long get_out(long m,int n)
{
long temp,result=0L,weight=1L;
whil
temp=m*(n%10)*weight%1000000L;
result+=temp;
result%=1000000L;
n/=10;
weight*=10L
return result
int main
int t,i,j,in;
long out[20];
scanf("%d",&t);
for(i=0;i<t;++i)
scanf("%d",&in);
out[i]=1L;
for(j=2;j<=in;++j)
if(isprime(j))
out[i]=get_out(out[i],j);
printf("%ld\n",out[i]);
}
return 0;
}